移位
2019-12-19 本文已影响0人
shelldon1024
C/C++中的左移是逻辑左移:舍弃最高位,往最低位补零。如果舍弃的最高位是 1,则发生数值溢出。如果没有发生数值溢出,左移效果相当于数值乘 2。
C/C++中的右移是算术右移:舍弃最低位,往最高位补符号位。不会发生数值溢出,右移效果相当于数值除以 2,直到数值变成-1(或 0)不再改变。
单次左移或右移操作的实际位数 real 不会超过该数据类型位数 bound,如果程序写的移动位数 fake 超过数据类型位数 bound,则实际移动位数为 real = fake % bound。