33,311
社区成员
发帖
与我相关
我的任务
分享
二进制向左移位操作,操作之后,最左边的位丢弃,最右边的位补 0,结果的位数和机器有关。
在 32 位系统中,如 0x12345678 << 8, 具体过程为:
0x12345678 对于的二精致形式为:
1 2 3 4 5 6 7 8
00010010 00110100 01010110 01111000
移位过程为:
1 2 3 4 5 6 7 8
00010010 00110100 01010110 01111000
左移 8 个二进制位
1 2 3 4 5 6 7 8 0 0
00010010 00110100 01010110 01111000 00000000
在 32 位系统中,只取最低 32 位(蓝色部分),上面的高 8 位(红色部分)为多于的,丢弃,
所以结果为
3 4 5 6 7 8 0 0
00110100 01010110 01111000 00000000
即 0x34567800。
二进制向左移位操作,操作之后,最左边的位丢弃,最右边的位补 0,结果的位数和机器有关。
在 32 位系统中,如 0x12345678 << 8, 具体过程为:
0x12345678 对于的二精致形式为:
1 2 3 4 5 6 7 8
00010010 00110100 01010110 01111000
移位过程为:
1 2 3 4 5 6 7 8
00010010 00110100 01010110 01111000
左移 8 个二进制位
1 2 3 4 5 6 7 8 0 0
00010010 00110100 01010110 01111000 00000000
在 32 位系统中,只取最低 32 位(蓝色部分),上面的高 8 位(红色部分)为多于的,丢弃,
所以结果为
3 4 5 6 7 8 0 0
00110100 01010110 01111000 00000000
即 0x34567800。
n = 3; //n二进制为11
b = n<<1; //n向左移动一位,b二进制为110
b = n<<2; //n向左移动二位,b二进制为1100
b = 1<<n; //1像左移动n位,相当于2的n次方,b二进制为1000