Tec*_*chJ 4 c bit-shift bitwise-operators
我在c中有一个小查询,我在数字69上01000101使用二进制的按位左移
01000101 << 8
Run Code Online (Sandbox Code Playgroud)
我得到的回答是 100010100000000
不应该全是8个零,即00000000 我们将所有8位向左移动然后用零填充.
这是因为数字(int)的文字(默认数据类型)在大多数现在的CPU中大于8-bit(通常32-bit),因此当你申请时
69 << 8 //note 69 is int
Run Code Online (Sandbox Code Playgroud)
它实际上是这样应用的
00000000 00000000 00000000 01000101 << 8
Run Code Online (Sandbox Code Playgroud)
这样你就得到了结果
00000000 00000000 01000101 00000000
Run Code Online (Sandbox Code Playgroud)
如果你特别使用,unsigned char那么它就不会发生:
unsigned char a = 69 << 8; //resulting in 0
Run Code Online (Sandbox Code Playgroud)
这是因为虽然69 << 8它本身仍将导致
01000101 00000000
Run Code Online (Sandbox Code Playgroud)
但是上面的值将被转换为8-bit unsigned char,导致:
00000000
Run Code Online (Sandbox Code Playgroud)