例如:
((WORD)((((WORD)(wData) >> 8) & 0xff) | (((WORD)(wData) << 8) & 0xff00)))
//byte转换为char代码是这样的:
c[i] = (char) (b[i] & 0xff) //(b[i]为byte型,c[i]为char型)
为何不直接c[i] = (char)b[i]呢?
分析:
char c = (char)-1 & 0xFF;
char d = (char)-1;
System.out.println((int)c);
System.out.println((int)d);
输出:
255
65535
1)-2的byte类型 16进制表示为 FE(2取反加1)
2)-2 & 0xFF运算: 实际-2带符合bit-wise成int,即FE会变成FFFFFFFE(2取反加1), 接着0xFFFFFFFE & 0x000000FF = 0x 000000FE; 如果不&,就是FFFFFFFE
3)负数进行&操作时需要转成补码,-2 的补码是0xFFFFFFFE,因为byte的取值范围是 -128~127,而Char是0~65535。所以需要& 0xFF 使得byte原来的负值变成正的。