1 逻辑运算符与逻辑表达式
逻辑运算符!、&&、I依次为逻辑非、逻辑与、逻辑或,这和数学上的与、或、非是一致的。逻辑非的优先级高于算术运算符,逻辑与和逻辑或的优先级低于关系运算符。逻辑表达式的值只有真和假,对应的值为1和0。下例中的代码是计算一年是否为闰年的例子,因为需要重复测试,所以我们用了一个while循环。
针对代码中的逻辑非,首先给变量j赋值10,因为j的值非0,所以!j的值为0;然后,由于逻辑非是单目运算符,结合顺序为从右至左,得到!!j的值为1。也就是说,对0取非,得到的值为1;对非0值取非,得到的值为0。
【例】逻辑运算符的使用
#include <stdio.h>
int main()
{
int i=0,j=1;
while(scanf("%d",&i)){
if(i%4==0&&i%100!=0||i%400==0){
printf("i is leap year\n");
}else{
printf("i is not leap year\n");
}
}
i=!!j;
printf("i的值=%d\n",i);
return 0;
}
【例】短路运算
#include <stdio.h>
int main()
{
int i=0;
i&&printf("you can't see me\n");
return 0;
}
逻辑与短路运算是当前面一个表达式为假时,后面的表达式不会得到执行,逻辑或短路运算是当前面一个表达式为真时,后面的表达式不会得到执行。
2 赋值运算符
a=b+25左右并不能互换为b+25=a,b+25不能作为左值,因为它并未标识一个特定的位置(并不对应特定的内存空间).因此,上面这条赋值语句是非法的.
【例】加后赋值与乘后赋值的用法。
#include <stdio.h>
int main()
{
int iNum,iResult;
iNum=10;
iResult=3;
iNum+=5;
iResult*=iNum;
printf("iNum=%d\n",iNum);
printf("iResult=%d\n",iResult);
return 0;
}
3 求字节运算符sizeof
sizeof是一个运算符而非一个函数
【例】
#include <stdio.h>
int main()
{
int i=0;
printf("i size is %d\n",sizeof(i));
return 0;
}