算数运算符:
除法运算符和求余运算符特别注意。此外,还有单目和双目。
目:当+表示加的时候,有两个操作数,此时为双目。当表示一个数为正数的时候,只有一个操作数,为单目。
C语言中有唯一一个三目运算符:?:
变量a里储存的值+字符b(参与运算的是字符b所对应的ASCII码的值)+变量a的字符b次方*3/4+5
运算付的优先级:数字越小优先级越高
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,k;
i = 1 + 2;
j = 1 + 2 * 3;
k = i + j + -1 + pow(2,3);
printf("i = %d\n",i);
printf("j = %d\n",j);
printf("k = %d\n",k);
return 0;
}
当两个操作上数的类型不同,进行运算之前要进行数据转换。编译器会将占用坑位较小的转成坑位较大的。
一个浮点型的数强制为整型输出就会打印出错误的数字。
#include <stdio.h>
int main()
{
printf("整型输出 = %d\n",1+2.0);
printf("浮点型输出 = %f\n",1+2.0);
return 0;
}
在数据前加上(int)就可以强制转换数据类型
将浮点数强制转化成整数会直接将小数后的舍去。
大坑→小坑
关系运算符:双目,得到的值为逻辑值
关系表达式:返回一个逻辑值0/1
逻辑运算符
任何非0的数告诉编译器,编译器都会认为是真。
#include <stdio.h>
int main()
{
int a=5,b=3;
printf("%d\n",3>1 && 1<2);
printf("%d\n",3+1 || 2==0);
printf("%d\n",!(a+b));
printf("%d\n",!0 + 1 <1 || !(3+4));
printf("%d\n",'a'-'b' && 'c');
return 0;
}
11001
短路求值:
#include <stdio.h>
int main()
{
int a=5,b=3;
(a=0) && (b=5);
printf("a=%d,b=%d\n",a,b);
(a=1) || (b=5);
printf("a=%d,b=%d\n",a,b);
return 0;
}
第一行:首先&&是从左往右的结合性,先进行左边()里的运算,将0赋值给a,此时&&左边为0,已经确定了整个逻辑的值,不管右边是0还是1都不影响结果,所以右边的式子根本不会进行运算,即5没有赋值给b,b还是原来的值3。
第二行:首先||的结合性也是从左到右。先进行左边的运算,a=1确定后整个式子的逻辑值就确定了,所以右边的式子不会进行运算,b还是原来的值3。