我试图理解以下代码:
int omgezetteTijd =
((0xFF & rekenOmNaarTijdArray[0]) << 24) | ((0xFF & rekenOmNaarTijdArray[1]) << 16) |((0xFF & rekenOmNaarTijdArray[2]) << 8) | (0xFF & rekenOmNaarTijdArray[3]);
我不明白的是为什么要用OxFF对其进行“与”运算,而将8位与8位的值进行“与”运算(11111111),因此这应该给您相同的结果。
但是,当我不与OxFF进行“与”运算时,会得到负值吗?无法弄清楚为什么会这样吗?
当您或带有int的字节时,该字节将被提升为int。默认情况下,这是通过符号扩展完成的。换一种说法:
// sign bit
// v
byte b = -1; // 11111111 = -1
int i = (int) b; // 11111111111111111111111111111111 = -1
// \______________________/
// sign extension
通过这样做& 0xFF
可以防止这种情况。IE
// sign bit
// v
byte b = -1; // 11111111 = -1
int i = (int) (0xFF & b); // 00000000000000000000000011111111 = 255
// \______________________/
// no sign extension
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句