C语言中的位移运算效率比乘除法高,所以尽量用位移运算替代乘除法。
1、什么样的数据类型可以直接移位
char、short、int、long、unsigned char、unsigned short、unsigned int、unsigned long都可以进行移位操作,而double、float、bool、long double则不可以进行移位操作。
2、有符号数据类型的移位操作
对于char、short、int、long这些有符号的数据类型:
- 对负数进行左移:符号位始终为1,其他位左移 ,后面添0
- 对正数进行左移:所有位左移,即 <<,可能会变成负数
- 对负数进行右移:左边添1 ,右边丢弃。
- 对正数进行右移:所有位右移,即 >>
3、无符号数据类型的移位操作
对于unsigned char、unsigned short、unsigned int、unsigned long这些无符号数据类型,没有特殊要说明的,使用<< 和 >> 操作符就OK了