1.算术运算符( + - * / % ) --算术表大式
加 减 乘 除 取余
[%] 只能运载整型
[/] 如果 左操作数 和 右操作数 都是整型时,执行整除运算
#include <stdio.h>
// 算术运算符
void main(){
int result = 4+5*2-6/3+11%4;
printf("result = %d" result) // 输出 15
}
2. 关系运算符( > < == >= <= != )
大于、小于、等于、大于等于、小于等于、不等于,关系表达式的值只有真(1)和假(0),c语言中没有布尔型
3>4为假 5>3为真
[关系运算符优先级低于算术运算符]
#include <stdio.h>
void main(){
int i;
while(scanf("%d",&i)){ //while是循环,之后讲
// i>3&&i<10 表示的是 3<i<10
if(i>3&&i<10){ // if-else 判断条件,之后讲
printf("a is between 3 and 10\n");
}else{
printf("a isn't between 3 and 10\n");
}
}
}
3 逻辑运算符( ! && || ) 逻辑非、逻辑与、逻辑或
[逻辑非得优先级高于算术运算符,逻辑与、逻辑或优先级低于关系运算符],只有真和假
#include <stdio.h>
// 例子计算润年
void main(){
int i=0, j=6;
while(scanf("%d" &i)){
if(i%4==0 && i%100!=0 || i%400==0){
printf("i is leap year\n");
}else{
printf("i isn't leap year\n");
}
}
i=!!j; //从右至左运行
printf("%d", i) // i=1
}
短路运算:
#include <stdio.h>
//短路运算 (逻辑与 和 逻辑或)
void main(){
int i=0;
i && printf("you can't see me\n"); //i为假时不会执行逻辑与后的表达式
// 等价于
// if(i){
// printf("you can't see me\n");
// }
i || printf("you can't see me\n"); //i为假时会执行逻辑或后面的表达式
}
4. 位运算符(<< >> ~ | ^ &),只能用于整型数据进行操作
依次是左移(高位丢弃,低位补0,相当于×2),
右移(低位丢弃,正数高位补0,负数高位补1,相当于÷2),
算术左移和算术右移,逻辑左移和逻辑右移空位都补0
异或(相同的数进行异或时,结果为0,任何数和0进行异或时,结果为其本事)
按位取反(数位上的数1变成0,0变成1),
按位或/按位与(用两个数的每个数为进行与或)
#include <stdio.h>
//短路运算 (逻辑与 和 逻辑或)
void main(){
short i=5; // short 两个字节的整型
short j;
// 左移
j=i<<1;
printf("%d\n",j) // 左移×2,结果位10;
// 右移
j=i>>1;
printf("%d\n",j); // 右移÷2,结果为2;
short k=-8;
short m=k>>1;
printf("%d\n",m); //右移÷2,结果为-4;
// 右移无符号数
i=0x8011;
unsigned short s=0x8011 // 无符号数,只能大于等于0;
unsigned short r=0;
j=i>>1; 有符号数右移
r=s>>1; 对无符号数右移
printf("r=%d\n",r); // 结果不一样 j=16376 r=16392
// ------------------------------------------------
i=5; j=7;
// 按位与
printf("i & j=%d\n", i&j); // 5
// 按位或
printf("i | j=%d\n", i|j); // 7
// 按位异或
printf("i ^ j=%d\n", i^j); // 2
// 按位取反
printf("~i=%d\n", ~i); // -6
}
5. 赋值运算符( = 及其扩展赋值运算符 )
必须理解[左值]和[右值],左值:出现在赋值符号左边的东西,只有变量能放在左边,右值:出现在赋值符号右边的东西
#include <stdio.h>
void main(){
int a=1,b=2;
// a+25=b // error:lvalue required as left operand of assignment
b=a+25;
// 符合赋值运算
int iNum;
// iNum = iNum +5;
// 等价于
iNum += 5; // 加后赋值 (还有 乘后赋值)
}
6. 条件运算符( 表达式 ? 值1 : 值2 )
条件运算符是C语言中唯一的三目运算符,有三个操作数,通过判断问号前的表达式的真假来确定整体表达式的值
#include <stdio.h>
int main(){
int a,b,max;
scanf(%d%d,&a,&b);
// 如果a>b,则max=a; 反之 max=b
max=a>b?a:b;
printf("max=%d",max);
return 0;
}
7. 逗号运算符( , )
所有C语言中优先级最低的,逗号表达式的整体值是最后一个表达式的值
#include <stdio.h>
int main(){
int i,j;
i=10;
j=1;
if(i,j-1){ // 不会进入表达式,整体表达式的值是最后一个表达式的值,j-1=0
printf("if excute\n");
}
return 0;
}
8. 指针运算符( * & )
9. 求字节数运算符(sizeof) sizeof不是函数,而是一个运算符
#include <stdio.h>
void main(){
int i=0;
printf("i size is %d\n",sizeof(i));
}
10. 强转换运算符( (类型) )
11. 分量运算符( . -> )
12. 下标运算符( [] )
13. 其他