1三大类:算术运算符,关系运算符,逻辑运算符
2优先级,结合方式:优先级高比优先级低先运算,优先级相同则按结合方向处理。
3例如:
上到下优先级降低。
运算符 | 解释 | 结合方式 |
() [] -> . | 括号(函数),数组,两种结构访问 | 由左向右 |
! ~ ++ -- + - * & (类型) sizeof | 否定,按位否定,增量,减量,正负号 间接,取地址,类型转换,求大小 | 由右向左 |
* / % | 乘,除,取模 | 由左向右 |
+ - | 加,减 | 由左向右 |
<< >> | 左移,右移 | 由左向右 |
< <= >= > | 小于,小于等于,大于等于,大于 | 由左向右 |
== != | 等于,不等于 | 由左向右 |
& | 按位与 | 由左向右 |
^ | 按位异或 | 由左向右 |
| | 按位或 | 由左向右 |
&& | 逻辑与 | 由左向右 |
|| | 逻辑或 | 由左向右 |
?: | 条件 | 由右向左 |
= += -= *= /= % | 赋值 | ... |
, | 逗号 | ... |
其他:
(1), += ++
#include<stdio.h>
int main() {
int a, b, c;
a = 5;
c = ++a;
b = ++c, c++, ++a, a++; //这里相当于b=a++
b += a++ + c; //优先级++ > + > +=
printf("a=%d b=%d c=%d\n", a, b, c);
return 0;
}
①注意优先级
②逗号表达式,取末尾计算的值
(2)^ &
#include<stdio.h>
int get_sum(int m, int n) {
int sum = 0;
int a = m ^ n;
//printf("%d\n", a);//调试判断是否正确
while (a) { //计算某整数二进制中1的个数
a = a & (a - 1);
sum++;
}
return sum;
}
int main() {
int m = 0;
int n = 0;
printf("请输入两个整数\n");
scanf("%d%d", &m ,&n);
int ret=get_sum(m,n);
printf("%d", ret);
return 0;
}
①这里为判断两个整数中二进制的不同位的个数
②计算整数中1的个数的多少
(3)sizeof()
返回类型是无符号整型
#include<stdio.h>
//关于sizeof()返回的类型是无符号整型
int i;
int main() {
i--;
printf("%d\n", i);
printf("%d\n", sizeof(i));
if (i > (int)sizeof(i)) {//结果强制转换成整型
printf(">\n");}
else{
printf("<\n");}
if (i > sizeof(i)) {//正常结果
printf(">\n");}
else {
printf("<\n");}
printf("%u\n", i);//i无符号整型大小
}
调试过程:
- ①无符号整型进行比较会将结果强制转换成无符号整型,可以强制转换回整型