在C++中,经常会看到别人有int ans=1<<30;类似的代码。经查阅,<<是位运算符号,代表把1的二进制表示左移30位,左移一位(即在原来的数后面加一个0)相当于乘以2,左移30位应该是相当于乘以2的30次方。可以写几句简单的代码做一下验证,例如1<<4应该得到16,代码如下
#include<iostream>
using namespace std;
int main()
int a = 1 << 4;
cout << a << endl;
return 0;
同理,也有右移运算,又移一位相当于除2
#include<iostream>
using namespace std;
int main()
int a = 4 >>1;
cout << a << endl;
return 0;
输出结果应该是2.
奇数存储在计算机中的补码最低位一定是1,而偶数存储在计算机中的补码最低位一定是0,与1按位与运算即可得到0或1。位移运算从执行上看效率要更高一些,但是考虑到具体的项目开发和其他环境问题,要结合具体情况进行比较。>> 右移:算术右移,右边丢弃,左边补原来的符号位;对于两个整数x,y,如果用 (x+y)/2 求平均值,有可能。|:按位或,按位或|,1或1为1,1或0为1,0或0为0。&:按位与,按位与&,1与1为1,1与0,0与0均为0。^:异或,相同为0,相异为1。~:按位取反,0转1,1转0。
目录一、概述二、正文(1)结合图示篇,更加简单明了。(2)文字描述篇,更深入。
本文是根据整合网上资料与相关博文总结出来的关于【 C/C++左移右移运算符 】的知识。
(1)结合图示篇,更加简单明了。
移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。
逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充。
算术移位:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中。
c++中
文章目录1. 左移 <<2. 右移 >>3. 数字111 左移 <<总结:
1. 左移 <<
取两个数字,左移第一个操作数的位,第二个操作数决定要移动的位置。换句话说,左移动一个整数 xxx 和一个整数 y(x<<y)y (x<<y)y(x<<y) 等于 xxx 乘以 2y2^y2y
代码示例:
/* C++ Program to demo
int minArea = 1 &lt;&lt; 30;
minArea = 1073741824,&lt;&lt;表示将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
例:a = a &lt;&lt; 2 将a的二进制位左移2位,右补0,左移1位后a = a * 2; 若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2..
<<左移运算符:expr1<<expr2表示expr1在计算机内部转换而成的二进制数字串左移expr2位,表面理解就是十进制数字expr1扩大2expr2倍
右移运算符:expr1>>expr2表示将expr1在计算机内部中转换而成的二进制数字串右移expr2位,表面理解就是10进制数组expr1缩小2expr2倍
测试代码:
#include <iost......
C++:左移和右移运算符 > > 和 < <简介语法备注左移右移移位和提升其他详细信息脚注
按位移位运算符是右移位运算符 (>>) ,它将 shift 表达式 的位移动到右侧,左移运算符 (<<) ,这将向左移动 移位表达式 的位数。
移位表达式 <<加法表达式
shift-expression >> additive-expression
以下说明和示例在 Windows 上适用于 x86 和 x64 体系结构