C/C++ &与&& |与|| 的区别

速览
&: (1)按位与1&1=1 1&0=0 0&0=0 (2)&var =var 的地址
&&: 判断两真为真其余全为假:if(a==0&&b==0)意思就是if a为0并且b为0的时候,执行下一步操作。
|: 按位或1|1=1 1|0=1 0|0=0
||:判断有一真即为真否则为假:if(a==0||b==0)意思就是if a为0或者b为0的时候,执行下一步操作。

&&

(1)逻辑与,即为and:当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。表示如果两个条件都成立则执行之后的逻辑。

eg:
12&&23=1// 此时条件判断为真
12&&-1=1// 此时条件判断为真
123&&0=0// 此时条件判断为假
if(a==0&&b==0),意思就是if a为0并且b为0的时候,执行下一步操作。

(2)&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。
eg:if(str != null && !str.equals(“”)),当str为null时,后面的表达式不会执行,所以不会出现NullPointerException

&

(1)&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。

二进制与运算规则:1&1=1 1&0=0 0&0=0

eg: 2&3=2?
2二进制: (10)
3二进制: (11)
按位与自然就是(10)=2

(2)& 也是取地址符
&var 读作"var 的地址"。

var = 3000;
// 通过取地址符&获取 var 的地址 
ptr = &var;
// 再通过运算符是间接寻址运算符 *获取 ptr 的值
 val = *ptr;

var :3000
ptr :0xbff64494
val :3000

在这里插入图片描述

||

逻辑或,是逻辑运算符,符号是“||”(在PASCAL中为"or")。 “逻辑或”相当于生活中的“或者”。

eg: 
 A||B,只有当A为假的时候才会对B进行判断。若A为真,则不继续对B进行判断。
12||1 =1   // 此时条件两真判断为真
12||0 =1  // 此时条件一真一假判断为真
0||0 =0	// 此时条件两假判断为假
if(a==0||b==0),意思就是if a为0或者b为0的时候,执行下一步操作。

|

按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位(也就是最后一位)相或,只要对应的二个二进位有一个为1时,结果位就为1。

二进制与运算规则:1|1=1 1|0=1 0|0=0

eg:
 A|B,会对A, B都进行判断。
128:     (0001 0000 0000)
127:     (0000 1111 1111) (高位用0补齐)
按位或就是(0001 1111 1111)=255

!

称为逻辑非运算符。用来逆转操作数的逻辑状态,如果条件为 true 则逻辑非运算符将使其为 false。

此篇仅用于简单区分,其他参考C++ 运算符 | 菜鸟教程 (runoob.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想想了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值