算数运算符和关系运算符
先进行乘除取余(%),后进行加减。
当操作符的两个操作都是整型数时,他执行整除运算,其他情况下执行浮点型数除法
取余(它接收两个整型操作数,将左操作数除于右操作数,但它的返回值是余数,而不是商)
int result=4+5*2-6/3+11%4;
printf("result=%d\n",result);
由关系运算符组成的表达式叫做关系表达式,关系表达式只有真和假,对应的值为1和0
关系运算符的优先级低于算数运算符
关系运算符(>,<,==……)
int main( ) {
int a;
while(scanf ( "%d",&a) )
{
if(3<a && a<10) //这才是正确的写法,逻辑运算符
if(a<3<10)//这个颜色意思是错误的代码
{printf("a is between 3 and 10\n");
}
else{
printf("a is not between 3 and 10\n"); //并不会执行,因为if的运算是不对的,表达式从左往后,依次进行,而不是说a同时小于10大于3,所以无论怎么输,都是执行上面一行代码
}
}
return 0;
}
逻辑运算符和逻辑表达式
! 逻辑非
&& 逻辑与
|| 逻辑或
逻辑非的优先级高于算术运算符,逻辑与和逻辑或的优先级低于关系运算符
逻辑表达式也只有真和假
C语言对空格不敏感
计算是否为闰年
int main ()
{ int year,i,j=6;
while (scanf("%d",&year))
{
if (year%4==0 && year%100!=0 || year%400==0) //这里优先级记不住,不要按照某些C语言书籍上的加括号,考研考试时会影响成绩,并且工作中也如此要求,因为会影响代码的运行速度
//记住优先级,就是为了省略多余的括号,小括号是最高优先级
//if是一个判断
{
printf("%d is leap year\n",year);
}
else{
printf("%d is not leap year\n",year);
}
}
i=!!j;
printf("i value=%d\n",i) //第一次非变成了0,0在非一次还是1,逻辑非的结合方向是右到左
return 0;
}
短路运算
int main() {
int i=0;
i&&printf("you can't see me!\n); //i为假时,不输出后面的 式子,i为真时,输出后面的式子
//短路运算可以使代码简洁明了,加快代码运行速度
//当i为假时,不会输出逻辑与后的表达运算式,称为短路运算
i=1;
i||printf("you can't see me\n"); //除非前面为假,否则就看不到后面的表达式
//i为真的,无论逻辑或推理出什么结果,都无法显示后面的表达式
return 0;
}
赋值运算符
能放在赋值运算符左边的才叫左值
赋值练习
int a=1,b=2;
a+25=b; //此处的编译错误是a+25不是一个左值
//等号左边必须放一个变量而不是一个表达式
b=a+25 是正确的
加号赋值(提高编译速度)乘法也可以
int a=1,b=2;
a=a+3; //右值的一个操作数与左值相等时,可以进行简写(a+=3)
求字节运算符sizeof
用于求常量和变量所占空间大小
int i=0;
printf("i size is %d\n",sizeof(i));