位运算和逻辑运算符号
位运算符号:
1.&/与运算符:
原理:对于两个值,转为2进制后末尾对其作比较,都为1为1,否则为0。
例子:
926和127做与运算,926转2进制为1110011110,127转二进制为1111111,对其如下:
1110011110
& 1111111
———————————
0000011110
结果为11110,转十进制为30。
应用场景:
取某个值二进制的末几位。
例子:
取926二进制(1110011110)的末三位(110),让他与0x07(此数为16进制下的7,2进制下的111,要取几位就与几个1,在转为16进制):
(926&0x07)=6(110)。
2.|/或运算符:
原理:对于两个值,转为2进制后末尾对其作比较,一个是1则为1,否则为0。
例子:
926和127做或运算,926转2进制为1110011110,127转二进制为1111111,对其如下:
1110011110
| 1111111
———————————
1111111111
结果为1111111111,转十进制为1023。
应用场景:
在某个值二进制的前面加入若干个1。
例子:
在30二进制(11110)的前面加入2个1(1111110),让他或0x60(此数为16进制下的60,2进制下的1100000,原值有几位就有几个0,再在前面加想要增加的1的数量,在转为16进制):
(30&0x60)=126(1111110)。
以上的使用方法:
int x=6;//110
int y=5;//101
int r=x运算符y;
/*
&:100
|:111
^:011
*/
cout<<r;
3.^/异或运算符:
原理:对于两个值,转为2进制后末尾对其作比较,不同为1,否则为0。
例子:
926和127做或运算,926转2进制为1110011110,127转二进制为1111111,对其如下:
1110011110
^ 1111111
———————————
1111100001
结果为1111100001,转十进制为993。
4.~/取反运算符:
原理对于一个值,转为2进制后如原值为负数,把每一位取反后加1,再把除了符号位的每一位取反得出结果;如原值为正数,把把除了符号位的每一位取反,再把每一位取反后加1得出结果。
例子:
(1).5取反:~5(0101)=-6(1110);
(1).-5取反:~-5(1101)=4(0100);
5.<</左移运算符:
原理:对于一个值,转为2进制后左移几位相当于在后面加几个0。
例子:
对30二进制(11110)进行左移两位,让他<<=2(左移几位就填几):
30<<=2=120(1111000)。
6.>>/右移运算符:
原理:对于一个值,转为2进制后右移几位相当于删除后面几个数。
例子:
对30二进制(11110)进行右移两位,让他>>=2(左移几位就填几):
30>>=2=7(111)。
逻辑运算符号:
1.&&/逻辑与运算符:
原理:所有判断都为true则为true,否则为false。
例子:
(1).cout<<(11&&1+12)<<endl会输出1(true);
(2).cout<<(1+23&&3*310)<<endl因为3*3不等于10,会输出0(false)。
2.||/逻辑或运算符:
原理:有至少一个判断为true则为true,否则为false。
例子:
(1).cout<<(11&&1+13)<<endl虽然1+1不等于3,但是1等于1,会输出1(true);
(2).cout<<(12&&3*310)<<endl因为两项都不成立,会输出0(false)。
3.!/逻辑非运算符:
原理:反转判断的结果,返回true变false,false变true。
例子:
(1).cout<<(!(11))<<endl虽然1等于1,但是反转,会输出0(false);
(2).cout<<(12)<<endl虽然1不等于2,但是反转,会输出1(true);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~