这是如何运作的?x << = 3 = -8其中(字节)x = 127?

Rau*_*ulp 1 c java logic unsigned

为什么我得到这个输出?

字节x; x = 127; x << = 3; //与x = x相同<< 3 println(x)

输出:-8

当我在纸上记下它并且弄乱了我得到的那些 - 11111000,那是= 248

我想Byte占用1个字节(8位).不知道它是签名还是未签名?我认为它要签名?

因为C中给出的下面代码也给了我-8:

signed char x = 127; X << = 3; printf("x =%d \n",x的值);

为什么-8 ?? rgd softy

Dav*_*nan 10

这是因为byte签名数据类型使用了两个补码.并且248-256等于-8.