&表示按位与,只有两个位同时为1,才能得到1
功能1:取得低八位通常配合移位操作符>>使用
例如: int i=0x5566; int j= i&0xff;// j=0x0066; int k= (i>>8)&0xff; //k=0x0055功能2:保证补码的一致性
此功能往往为byte类型转化为其他类型;出错概率大的功能点
首先需要理解机器码、原码、反码、补码概念
https://blog.csdn.net/jason_lee155/article/details/104059302
例如:
byte b = -127;//1000 0001
int a = b; //a = 1000 0000 0000 0000 0000 0000 0111 1111 =-127
a = b&0xff; //a = 1000 0001 =129
分析:
规则1:计算机内的存储都是按照补码存储的
所以:-127补码表示为 1000 0001
规则2:负数是以补码的形式保存,因此带符号右移时>>,高位依次为1,才能保证转换成原码后值不变!
所以:byte 类型提升为int时候,b的补码提升为 32位,补码的高位补1 1111 1111 1111 1111 1111 1111 1000 0001
规则3:负数的补码转为原码,符号位不变,其他位取反再加1,正数的补码,反码都是本身
所以:a = 1000 0000 0000 0000 0000 0000 0111 1111
a = b & 0xff = b&0x000000ff
此时b为32位机器码
b = 1111 1111 1111 1111 1111 1111 1000 0001
0x00ff = 0000 0000 0000 0000 0000 0000 1111 1111
&之后 a = 0000 0000 0000 0000 0000 0000 1000 0001 = 129



