一、算术运算符
1.加法(+)
2.减法(-)
3.乘法(*)
4.除法(/)
在除法运算过程中不能完全整除,C语言不是采用四舍五入 参与运算的量均为整型时,结果为整型,舍去小数。 如果运算量中有一个为实型,默认结果为双精度浮点数。
printf("%d\n",5/4);
printf("%f",5.5/4);
printf("%lf",5.5/4);
除号的正负取舍:符号相同为正,相异为负
printf("%d\n",4/2);
printf("%d\n",-4/2);
printf("%d\n",4/-2);
printf("%d\n",-4/-2);
在除法或者取余运算中如果右边的值是0,程序运行时将会出现程序崩溃现象。
5.取模/求余(%)
求余符号的正负取舍和被除数符号相同(与左边操作数相同)
printf("%d\n",5%2);
printf("%d\n",-5%-2);
printf("%d\n",-5%2);
printf("%d\n",5%-2);
操作数只能是整数型
printf("%d\n",5%2);
printf("%d\n",5.0%2);
printf("%d\n",5%2.0);
在除法或者取余运算中如果右边的值是0,程序运行时将会出现程序崩溃现象。
6.自增自减(++、–)
前加加/减减(++i) 前缀自增自减符号的表达式都可以拆分为,在当前表达式前一行代码中执行自增自减运算
int i=0;
int sum=0;
sum=++i;
printf("%d,%d\n",sum,i);
后加加/减减(i++) 后缀自增自减符号的表达式都可以拆分为,在当前表达式后一行代码中执行自增自减运算。
int i=0;
int sum=0;
sum=i++;
printf("%d,%d\n",sum,i);
二、关系运算符
运算结果只能是“真”或“假”,真的值都为1,假的值都为0
三、逻辑运算符
运算结果也只能是“真”或“假”,真的值都为1,假的值都为0 逻辑与:左边真,执行右边 逻辑或:左边假,执行右边
在C语言的判断表达式中,与0的比较往往可以简写。例如:
a)if(n!=0)可以简写为if(n),while(n!=0)也可以简写为while(n);
b)if(n==0)可以简写为if(!n),while(n==0)也可以简写为while(!n)。
四、赋值运算符
在赋值符“=”之前加上其它二目运算符可构成复合赋值符。 如+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=
五、位运算符
1.左移(<<)
左移运算是将一个二进制位的操作数,按指定移动的位数向左移位。移出位被丢弃,右边的空位一律补0;只要是左移n位就是等价于乘以n个2;
7<<3
7乘以3个2 7*2*2*2=56
结果:56
2.右移(>>)
右移运算是将一个二进制位的操作数,按指定移动的位数向右移动。移出位被丢弃,右边移出的空位有可能补0,也有可能补符号位。只要是右移n位就等价于除以n个2。
a)如果使用无符号变量做右移,移动后高位填充的是0。
例如:
unsigned char c= 56;
c>>=3;
56除以3个2 56/2/2/2=7
结果:7
b)有符号变量当在最高位(符号位)是1的时候(也就是当它是负数时),右移运算后的高位填充的是1。
例如:
char c= -128;
c >>=3;
-128除以3个2 -128/2/2/2=-16
结果:-16
3.按位与(&)
按位与运算符"&"是双目运算符,其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位同时为1时,结果位才为1。否则2个对应位,有一方为0按位与的结果就是0。
7&28
结果:4
4.按位或(|)
按位或运算符"|"是双目运算符,其功能是参与运算的两个数双方对应的二进制位,只要有一方是1结果位就是1。否则,只有双方对应位同时为0时,按位或的结果位才是0。
7|28=31
5.按位取反(~)
取反运算符~是单目运算符,具有右结合性,其功能是对参与运算的数的各二进位按位取反。所谓取反,就是把每个位上的0变为1、1变为0。
一个有符号的数值取反之后的规律是: a)正数或零按位取反之后一定是负数,反之亦然,负数按位取反之后一定是正数或零; b) 0取反之后一定是-1,因为0(0x00)就是所有位都是0的数值,-1(0xFF)是所有位都为1的数值; c) 最后一个规律就是:负数的绝对值总是比取反后的正数大1,例如:-1与0、1与-2、127与-128等。
一个无符号的数值取反之后的规律是: a)取反之前与之后的数值都一直是正数没有负数,例如:0与255、1与254、127与128等; b)数值小的取反后数值大,数值大的取反之后数值小,取反前与取反后的数值相加的和总是255; c)从十六进制上看,取反之前与之后的数值相加,刚好是凑成了所有位都为1的结果(0xFF)。
6.按位异或(^)
异或(英文为exclusive OR,或缩写成xor)是双目运算符,对参与运算的两个数的二进制位比较,相同结果位得0、不同结果位得1
任意一个数值连续2次与同一个数做异或运算将恢复原值。
六、三目运算符(?:)
问号之前是条件判断区,问号之后是真区,冒号之后是假区。
3>4?printf("是的"):printf("不是");
(3 > 4) ? printf("是的") : printf("不是");
七、求字节数运算符
1.sizeof()
用于计算数据类型所占的字节数(sizeof)
printf("%d",sizeof(double));
八、指针运算符
1.取内容(*)
取内容(*)
int i[] = {0,1,2,3};
printf("%d", *i);
2.取地址(&)
取地址(&)
char s[] = "tl";
printf("%p", &s);
九、运算符优先级
简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
|