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;
}

大家帮着解释解释,如果觉的分少我可以再加.谢了

解决方案 »

  1.   

    举个具体的例子吧  假如你的字符数组里只有1这个byte:
    然后首先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
      

  2.   

    为什么不直接用java自带的取反(~)操作符啊?
      

  3.   

    若你这里的取反位操作是正确的话,那java的取反位操作不定就是这么实现的。
      

  4.   

    对了,为啥不用JAVA的取反运算呢?
      

  5.   

    JAVA自带的取反运算不是很好用吗?