2012-05-09 41 views
0

为什么我得到这个输出?这是如何工作的? x << = 3 = -8其中(字节)x = 127?

Byte x; x = 127; X < < = 3; //相同X = X < 的println(X)

输出:-8

当我记下它在纸张和重组后我得到的位 - 11111000那就是= 248

我想字节占用1个字节(8位)。不知道它是有符号还是无符号?我认为它是有符号的吗?

,因为在下面C代码给了我-8还有:

符号字符X = 127; x < < = 3; printf(“x的值=%d \ n”,x);

为什么-8? rgd softy

+0

C代码是不明确 - 移位产生值1016,并且如果该签名是的char''的范围之外,那么结果是实现定义的。 – caf

回答

10

这是因为byte是使用two's complement签名的数据类型。而248-256等于-8

+0

+1我会写'byte'而不是'Byte'和'(byte)248' =='-8' –

0

由于您使用符号的字符,该范围为-128至127 .. 的符号字符最高有效位(MSB)被限制在各自的负签署.. 0 positve ,, 1。

如果为正数.. 数值正常计算。

但是,如果负.. 值是计数[normal_value] - [MAX_VALUE] 例如:

129 = 1000 0001 [位]

所以vallue签收= 129 - 256 = - 127

CMIIW

相关问题