在离散数学中,常常会使用“与”、“或”、“非”等联结词,在集合里,也有“交”、“并”、“补”,同样的在C语言中,也有一些关系逻辑运算符号,例如:“&&”、“||”、“!”。下面,我将详细谈谈C语言中的逻辑运算符。
关系逻辑运算符
假定变量A的值为1,变量B的值为0,下表展示了C语言支持的所有算术运算符。
关系运算符实例
举个栗子:判断某一年是否为闰年
核心思路:
①、能被4整除且不能被100整除的是闰年.
②、能被400整除的是闰年.
由上可知条件①和条件②是或者的关系,而在条件①中的两个小条件又是并且的关系。所以条件①和条件②之间用关系运算符“||”,条件①中的两个小条件则用关系运算符“&&”。
源代码如下:
#include <stdio.h>
int main()
{
int year;
printf("请输入年份:\n例如 2020\n");
scanf("%d",&year);
if ((year%4==0 && year%100!=0) || year%400==0)
{
printf("%d是闰年\n",year);
} else
{
printf("%d不是闰年\n",year);
}
return 0;
}
运行编译上面的源代码,输入2020,将会输出以下结果:
2020是闰年
位运算符
位运算符作用于位,并逐位执行操作。下面是“&”、“|”、“^”的真值表。
假定A = 45,B = 15,将他们转为二进制数,他们如下所示:
A = 0010 1101
B = 0000 1111
根据真值表,不难得出:
A & B = 0000 1101
A | B = 0010 1111
A ^ B = 0010 0010
~A = 1101 0010
(2 的补码形式,带符号的二进制数)
~B = 1111 0000
(2 的补码形式,带符号的二进制数)
温馨提示:“^”是异或运算符,如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
拓展小知识
原码、反码和补码的两个小结论:
①对于正数,反码 = 补码 = 原码
②对于负数,反码 = 除符号以外的各位取反;补码 = 反码 + 1
总结一下
还是假定A = 45,B = 15,将他们转为二进制数为 A = 0010 1101,B = 0000 1111 C语言支持的所有位运算符号,如下表所示:
下面的实例展示了C 语言中所有可用的位运算符,源代码如下:
#include <stdio.h>
int main()
{
int a = 45,b = 15;
printf("a & b = %d\n",a&b);
printf("a | b = %d\n",a|b);
printf("a ^ b = %d\n",a^b);
printf("~a = %d\n",~a);
printf("~b = %d\n",~b);
printf("a << 2 = %d\n",a<<2);
printf("b << 2 = %d\n",b<<2);
printf("a >> 2 = %d\n",a>>2);
printf("b >> 2 = %d\n",b>>2);
return 0;
}
运行编译上面的源代码,将会输出以下结果:
a & b = 13
a | b = 47
a ^ b = 34
~a = -46
~b = -16
a << 2 = 180
b << 2 = 60
a >> 2 = 11
b >> 2 = 3