算术移位和逻辑移位
基本概念
逻辑移位:移位所缺少的数字用“0”来填充
算术移位:移位所缺少的数字用符号位来填充
C/C++中的移位
在C/C++中,整数分为有符号整数和无符号整数两种
- 1 - 对于无符号数,采用逻辑移位,不论左移右移都用“0”填充;
- 2 - 对于有符号数,分左移和右移两种情况
- 2a - 若为左移,则属于逻辑运算,补“0”
- 2b - 若为右移,则属于算术运算,补“符号位”
看一道有关位移的面试题
int main()
{
int a = 1;
int b = 32;
printf("%d %d\n", a << b, 1 << 32);
return 0;
}