(&& ) 按位与 和 (&) 逻辑与有什么区别?
按位与和逻辑与的区别如下:
①代表含义不同
按位与运用二进制进行计算,逻辑与比较符号两边的真假输出逻辑值。
②运算法则不同
按位与对所有的表达式都要判断,逻辑与运算符第一个表达式不成立的话,后面的表达式不运算,直接返回。
③输出不同
按位与&输出运算结果为不同的数值,逻辑与 && 输出逻辑值true或者 false。
例如: 按位与1&2=0;逻辑与1&&2=true(一般用数字1代指ture)。
扩展资料
按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位都为1时,结果位才为1。参与运算的两个数均以补码出现。
按位与规则
1&1=1
1&0=0
0&1=0
0&0=0
逻辑与,符号为“&&”,只有两个操作数都是真,结果才是真。 逻辑与操作属于短路操作,既如果第一个操作数能够决定结果,那么就不会对第二个操作数求值。对于逻辑与操作而言,如果第一个操作数是假,则无论第二个操作数是什么值,结果都不可能是真,相当于短路了右边。
逻辑与规则
1&&1=1
1&&0=0
0&&1=0
0&&0=0
参考资料来源:百度百科-按位与
参考资料来源:百度百科-逻辑与
&&和||是用于条件判断,而&和|是位运算。
· 【&】
//相当于二进制减法;
//计算原理:数值转成二进制 > 二进制相减(遇0为0) > 再将二进制计算结果转成数值;
(1&1) = (0001 - 0001 = 0001) = 1
(1&2) = (0001 - 0010 = 0000) = 0
(2&2) = (0010 - 0010 = 0010) = 2
(7&5) = (0111 - 0101 = 0101) = 5
(7&8) = (0111 - 1000 = 0000) = 0
(8&4) = (1000 - 0100 = 0000) = 0
//如:true = 0001, false = 0000
(true|false) = (0001 - 0000 = 0000) = false
(true|true) = (0001 - 0001 = 0001) = true
(false|false) = (0000 - 0000 = 0000) = false
· 【|】
//相当于二进制加法;
//计算原理:数值转成二进制 > 二进制相减(遇1为1) > 再将二进制计算结果转成数值;
(1|1) = (0001 + 0001 = 0001) = 1
(1|2) = (0001 + 0010 = 0011) = 3
(2|2) = (0010 + 0010 = 0010) = 2
(7|5) = (0111 + 0101 = 0111) = 7
(7|8) = (0111 + 1000 = 1111) = 15
(8|4) = (1000 + 0100 = 1100) = 12
//如:true = 0001, false = 0000
(true|false) = (0001 + 0000 = 0001) = true
(true|true) = (0001 + 0001 = 0001) = true
(false|false) = (0000 + 0000 = 0000) = false
· 【&&】
//条件与
//其中一方为false则返回false
//左右两方同时为true则返回true
(true&&false) = false
(true&&true ) = true
(false&&false) = false
· 【||】
//条件或
//其中一方为true则返回true
//左右两方同时为false则返回false
(true || false) = true
(true || true ) = true
(false || false) = false
举个例子来解释一下吧,
false&true-->false
false&&true-->false
单从结果上看,他们结果是一样的,都是false
但是前者在运行的时候,计算机首先判断第一个条件为false,然后判断第二个条件true,然后判断出结果为false
而后者,首先也是判断第一个条件,当判断出为false时,程序立即终止,因为不管第二个条件是什么,结果一定为false
这就是他们之间的区别
希望我的回答能对你有所帮助
int main()
{
int i=0,j=0;
if(i--&i--)
printf("The true i is %d\n",i);
else
printf("The false i is %d\n",i);
if((j--)&&(j--))
printf("The true j is %d\n",j);
else
printf("The false j is %d\n",j);
}
//输出结果:The false i is -2 The false j is -1;