2011-02-22 167 views
2
unsigned char x = 93; 
unsigned char a = x << 4; 
printf("a = %d\n", a); 

我明白位操作符如何工作,但我不明白x的二進制表示。位操作符與無符號字符

a = 208是怎樣的?

回答

4
93 = 01011101 

移位留下4位,它留下以下(只有8位在結果):

11010000 = 208 
+0

`signed char`或`char`也包含8位? – foo 2011-02-22 17:37:01

+0

@mateo:是的,都是8位。 – 2011-02-22 17:38:05

3
x = 93 = 0x5D = 0101 1101 
     << 4 = 1101 0000 

1101 0000以十進制爲208

0

這是因爲無符號字符只能是255(1111 1111二進制)。如果一個數字是左移的,那麼所有超出邊界的數據都會丟失。 0b11111111 < < 1 = 0b11111110

所以,如果你在二進制(0101 1101)和左移得到93這4次,你會得到1101 0000 -The 4最左邊位永遠失去了。

1
93 = 0x5d 
0x5d << 4 = 0x5d0 
0x5d0 & 0xff = 0xd0 
0xd0 = 208 

即本案的情況是頂位已被切斷。

1

在數學上它對應於以下:

X < < 4爲x * 16,所以X * 16 = 93 * 16 = 1488

但a是一個無符號的字符(即,0 < =一< 256),所以a = 1488模256 = 208