移位操作符是一种双目操作符,移动的是储存在内存中的二进制数。左位移操作符<< 与右位移>> 的移动规则并不相同。
写法
左移操作符左边是我们想要移动的变量,右边是想要移动的位数
如,将变量a向左移动1位可以写做:a << 1。
另外在写变量移动的位数时,不可以移动负位数,移动负位数是标准无定义的!
1.左位移操作符
左位移操作符的移动规则为:“左边抛弃,右边补0”。
如:
方框中的内容是编译器所读取的内容,同样也是展现出来给程序员看的内容。将 a 整体向左移动一位后,左边的0就会超出方框范围被舍去,右边为了补齐32位数会添加一个0来使总数量保持不变。此时 a 的移动便完成了。
需要注意的是,虽然 b 等于 a 向左移1位的值,但位移操作符并没有改变变量 a 的值。
还有一个巧点,那就是左移对变量其实还有乘2的效果,比如下图将 a 向左移动一位后 a 从10变成了20。
2.右位移操作符
右位移操作符的移动规则并不相同,分为逻辑右移和算数右移两种方法。这两种移动规则的选择由编译器决定,但大部分的编译器用的都是算数右移,比如VS等。
(1)逻辑右移
逻辑右移规则:
逻辑右移:“左边补零,右边丢弃”
逻辑右移和左位移操作符移动规则相似,只不过一个向右移、一个向左移。
而且逻辑右移也有着使变量数值大小除2的效果。
(2)算术右移
算术右移规则:
算数右移:“左边用该原值的符号补,右边丢弃”
算数位移左边用该原值的符号补的意思是:当二进制数右移时,方框中左边的位置就会被空出来,这是便用原数值中符号位的数补齐空缺位置
如:
-20的符号位是1,所以 a 右移后方框里空出来的两个位置补上两个1,最右边多出来的两个0舍去。
以上便是本文的全部内容,如有错误或改进之处也欢迎留言给作者,感谢观看。