2个字节转short,我是这样处理的
1、int a = (byte[0]<<8) | byte[1],结果有问题 当收到的byte[1]是负数,比如-128,a的结果就成了负数,请问为什么?符号位应该是不是1啊。 2、为什么-128&oxff 就会等于+128,与得结果符号位是1啊,为什么是整数。
1、int a = (byte[0]<<8) | byte[1],结果有问题 当收到的byte[1]是负数,比如-128,a的结果就成了负数,请问为什么?符号位应该是不是1啊。 2、为什么-128&oxff 就会等于+128,与得结果符号位是1啊,为什么是整数。
-->原码:10000000 00000000 00000001 00000000
-->反码:11111111 11111111 11111110 11111111
-->补码:11111111 11111111 11111111 00000000
-128&0xf
11111111 11111111 11111111 00000000
&00000000 00000000 00000000 11111111
-------------------------------------
00000000 00000000 00000000 00000000
结果是0吧
是00000000 00000000 00000000 10000000 啊 我觉得
为什么你说是 10000000 00000000 00000001 00000000 请解释一下好吗
对不起,搞错了一位.
-128
-->原码:10000000 00000000 00000000 10000000
-->反码:11111111 11111111 11111111 01111111
-->补码:11111111 11111111 11111111 10000000
-128&0xf
11111111 11111111 11111111 10000000
&00000000 00000000 00000000 11111111
-------------------------------------
00000000 00000000 00000000 10000000结果是128
一个byte数只有8位,这个数参与运算(+,-,*,/,位运算等)时,要转为int来参与运算。增加的高位字节全要用byte的符号位填冲,这个就叫符号位扩展。
所以
-128
-->原码:10000000 00000000 00000000 10000000 原码转为反码就是除了符号位(最高位),其它余各位按位取反.->反码:11111111 11111111 11111111 01111111 反码转为补码,就是反码加1.-->补码:11111111 11111111 11111111 10000000