看了core java的一个例子,它为了得到20个2位的串,总要把每个字节和0xff &一下,这是为什么?
比如: MessageDigest md=MessageDigest.getInstance("SHA-1");
        md.update("sss".getBytes());
        byte[] b=md.digest();//b[0]=-65
        int i=b[0] & 0xff;
        System.out.println(Integer.toHexString(i));

解决方案 »

  1.   

    oxff是二进制的1111 1111  十进制的255
      

  2.   

    输出b[0]的二进制表示竟然是ffffffbf,-65的二进制应该是1100 0001啊.
      

  3.   

    如果直接 int a = byte 的话,这个 a 可能是个负值,就不对了。如果是 int a = byte & 0xff 的话,byte 在进行 & 运算由于 0xff 为 int,因此会被提升为 int 类型,这样保证留住低 8 位数据,把高于 8 位的数据全部清除掉。
      

  4.   

    明白了,它这么做只是为了得到16进制的表示形式而已.因为byte是无法直接转成16进制的.和0xff相与值未变,但却可以得到这种形式.