为什么这个表达式总是导致-2,147,483,648(11111111 11111111 11111111 11111111)?我不明白。 data []是一个填充了一些值的byte-Array。
(((int)data[29] & 0x00000001) << 31) | (((int)data[30]&0x000000FF)<<12) | (((int)data[31]&0x000000FF)<<4) | (((int)data[32]&0x000000FF)>>>4)
感谢。
答案 0 :(得分:0)
我不认为你的表达总是会返回signed int的min值。
如果data
数组中的所有值都为零,则返回零。
我也不认为这会导致将所有位设置为1。
以下代码(Java),我使用Integer.MAX_VALUE
:
int max = Integer.MAX_VALUE; //(2^31 - 1) - all bits apart from the sign are 1
System.out.print(Integer.toBinaryString(((max & 0x00000001) << 31) | ((max&0x000000FF)<<12) | ((max&0x000000FF)<<4) | ((max&0x000000FF)>>>4)));
返回:
10000000000011111111111111111111
System.out.print(Integer.toBinaryString(
((0b00101001 & 0x00000001) << 31) |
((0b11111111 & 0x000000FF) << 12) |
((0b11111001 & 0x000000FF) << 4) |
((0b11001111 & 0x000000FF ) >>> 4))
);
返回:
10000000000011111111111110011100