最近帮朋友写一个比特币的程序,其中有一个是将一个字节组成的数组转换成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?于是便舍弃了任意数的高八位 。

页面下部广告

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

鲁ICP备17018668号-1