unsigned char x = 93;
unsigned char a = x << 4;
printf("a = %d\n", a);
我确实理解位运算符是如何工作的,但我不理解x的二进制表示。
a = 208怎么样?
答案 0 :(得分:4)
93 = 01011101
将4位移位并保留以下内容(结果中只有8位):
11010000 = 208
答案 1 :(得分:3)
x = 93 = 0x5D = 0101 1101
<< 4 = 1101 0000
1101 0000(十进制)是208。
答案 2 :(得分:1)
93 = 0x5d
0x5d << 4 = 0x5d0
0x5d0 & 0xff = 0xd0
0xd0 = 208
即。这里发生的事情是顶部的位被截断了。
答案 3 :(得分:1)
数学上它对应于以下内容:
x <4是x * 16,所以x * 16 = 93 * 16 = 1488
但是a是无符号字符(即0&lt; = a&lt; 256),所以a = 1488模256 = 208
答案 4 :(得分:0)
那是因为unsigned char只能大到255(二进制1111 1111)。如果一个数字被左移,那么超出其边界的所有位都将丢失。 0b11111111&lt;&lt; 1 = 0b11111110
所以,如果你得到93的二进制(0101 1101)并且左移4次你会得到1101 0000 - 最左边的4位永远丢失。