与(&)运算和或(|)运算
作者:互联网
与运算
与运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
逻辑且的符号是&&
,符号上非常接近。二进制就是通过与、或、异或、位移等完成运算的,跟我们所认知的十进制运算不一样。与和或的运算规则比较难理解也很容易忘记,我发现可以借助逻辑且和逻辑或来理解。
0 代表 false、1 代表 true。逻辑且必须要左右两边的布尔都是 true 才返回 true,否则返回 false。
#include <stdio.h>
int main(void)
{
printf("0 && 0 = %d\n", 0 && 0);
printf("0 && 1 = %d\n", 0 && 1);
printf("1 && 0 = %d\n", 1 && 0);
printf("1 && 1 = %d\n", 1 && 1);
return 0;
}
以上四种的执行结果:
第一个、第二个和第三个“逻辑且”,有一个 false 值(假值,也就是数字 0),不满足逻辑且的规则:都是真才返回真。而第四个且运算中,全都是 true 值(真值,也就是数字 1),满足逻辑且的规则,所以结果是 1。
我们可以借助“逻辑且”来理解“与运算”。开头给出的“与运算”规则,和我们用逻辑且运算出来的结果是一样的。但是,要注意的是,逻辑运算终究只能对布尔进行运算。虽然,true 可以是 1,false 可以是 0,但是数字 2、3、4 都被视作为 true。所以 3&&5=1
:
“与运算”不是逻辑运算,跟 +、-、*、/ 一样,都是算术运算符。不同的是,“与运算”是对二进制进行运算,规则上跟逻辑且相似。上面所说的只是在借助“逻辑且”来理解“与运算”的规则而已。
3 和 5 的与运算结果:
3 的二进制是 011,5 的二进制是 101。借助逻辑且,只要有 false(0)就是 false(0)。011&101=001
,001 就是十进制的 1。所以,3&5=1
。
或运算
或运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;
0 代表 false、1 代表 true。逻辑或中只要其中一个是 true 就是 true。
#include <stdio.h>
int main(void)
{
printf("0 || 0 = %d\n", 0 || 0);
printf("0 || 1 = %d\n", 0 || 1);
printf("1 || 0 = %d\n", 1 || 0);
printf("1 || 1 = %d\n", 1 || 1);
return 0;
}
以上四种的执行结果:
第一个“逻辑或”,都是 false 值(假值,也就是数字 0),没有一个 true,所以结果是 false,即 0。而最后三个有一个 true 值(真值,也就是数字 1),所以结果是 1。
上面所说的只是在借助“逻辑或”来理解“或运算”的规则。3 或 5,即 011|101=111
,111 就是十进制的 7。所以,3|5=7
。
标签:逻辑,false,运算,&&,printf,true 来源: https://www.cnblogs.com/Enziandom/p/16692612.html