byte2Hex时,按位0xff与困惑
最近帮朋友写一个比特币的程序,其中有一个是将一个字节组成的数组转换成16进制编码,其中一个&0xff令我十分疑惑。
private static String bytArrayToHex(byte[] a) { StringBuilder sb = new StringBuilder(); for(byte b: a) sb.append(String.format("%02x", b&0xff)); return sb.toString(); }
&按位与是保留后7位,高位清零。这个作用是避免符号位扩展。
0xff:0000?0000?1111?1111
一个任意int数
0010?1000?0010?1010
&位操作的结果是双方的对应位均为1时才为1?否则为0
所以?上面那个任意数与0xff&的结果就是?0000?0000?0010?1010?于是便舍弃了任意数的高八位 。
页面下部广告