1 private byte[] change(byte[] buff){
2 for (int i=0;i<buff.length;i++){
3 int b=0;
4 for (int j=0;j<8;j++){
5 int bit = (buff[i]>>j&1)==0?1:0;
6 b += (1<<j)*bit;
7 }
8 buff[i]=[byte]b;
9 }
10 return buff;
11 }这个方法主要功能是把buff数组中的每个字节的每一位取反.我不是太明白,尤其是
for (int j=0;j<8;j++){
int bit = (buff[i]>>j&1)==0?1:0;
b += (1<<j)*bit;
}
大家帮着解释解释,如果觉的分少我可以再加.谢了
然后首先b = 0; 进入第二个for循环 j=0 bit的值取决于右边的那个表达式,也就是(buff[i]>>j&1)==0?1:0 括号先运算 1首先向右右移0位 然后于1进行与运算 当然结果还是0 所以红色的表达式变成了 0==0?1:0 这是if判断的三元运算符 所以这一位就变成1 也就是bit=1,
另外这个有错误吧?buff[i]=[byte]b 应该是buff[i]= (byte)b