文章目录
- 一、算术运算符
- 二、关系运算符
- 三、逻辑运算符
- 四、位运算符
- 五、其他的运算符
- 总结
一、算术运算符
注意:取余操作数只能是整数。自加分为左自加与右自加,左自加先自加后运算,右自加先运算后自加,自减与自加一样。
代码:
#include<stdio.h>
int main(){
int a = 10;
int b = 20;
//算数运算符 + - * / % ++ --
printf("%d\n",a+b);//30
printf("%d\n",a-b);//-10
printf("%d\n",a*b);//200
printf("%d\n",b/a);//2
printf("%d\n",b%a);//0
printf("%d\n",a++);//10 a=11
printf("%d\n",++a);//12 a=12
printf("%d\n",a--);//12 a=11
printf("%d\n",--a);//10 a=10
printf("====================================\n");
}
运行结果:
二、关系运算符
代码:
#include<stdio.h>
int main(){
int a = 10;
int b = 20;
//关系运算符 > < >= <= == !=
printf("%d\n",a>b);//0
printf("%d\n",a<b);//1
printf("%d\n",a>=b);//0
printf("%d\n",a<=b);//1
printf("%d\n",a == b);//0
printf("%d\n",a != b);
}
运行结果:
三、逻辑运算符
1.!逻辑反,其实就是取反,0->1,1->0。
2.&&逻辑与,又叫短路与,当&&符号左边的表达式为假,则编译器不看&&右边的代码。判断规则:两真才为真,一假则为假。
3.||逻辑或,又叫短路或,当||符号左边的表达式为真时,则编译器不看&&右边的代码。判断规则:两假才为假,一真则为真。
代码:
#include<stdio.h>
int main(){
//逻辑运算符 ! && ||
//! 取反
printf("%d\n",!(a==b));//1
//&& 两真则为真,一假则为假。当符号左边真值为0时,则编译器直接跳过右边代码。
if(a > b && ++a){
printf("yes\n");
}
printf("%d\n",a);//10
// || 两假则为假,一真则为真。当符号的左边真值为1时,则编译器跳过有边的代码。
if(a < b || ++b){
printf("yes\n");
}
printf("%d\n",b);//20
}
运行结果:
四、位运算符
运算规则:
1.~位逻辑反:位上的数0变为1,1变为0.
2.&位逻辑与:位上的数两个1为计算后的结果为1,有一个0为0
3.|位逻辑或:位上的数两个0为计算后的结果为0,有一个1为1
4.^位逻辑异或:位上的数相同为0,不同为1
5.<< n 左移n位:数据的二进制数向左移动n位,左边补n个0
6.>> n 右移n位:数据的二进制数向右移动n位,左边补n个0
左移与右移都是针对无符号数进行的运算。
代码:
#include<stdio.h>
int main(){
int a = 10;
int b = 20;
//位运算符 <<左移 >>右移 &按位与 |按位或 ^按位异或
printf("%d\n",a<<1);
printf("%d\n",a<<2);
printf("%d\n",a>>1);
printf("%d\n",a>>1);
printf("%d\n",b&a);
printf("%d\n",b|a);
printf("%d\n",b^a);
unsigned int n = 0x12ff0045;
n = n >> 3;
printf("%u",n);
}
运算结果:
五、其他的运算符
1.赋值运算符
1.=:只能给变量进行赋值,int a = 100;
2.可以连续赋值,int a,b,c;a=b=c=10;相当于a=10,b=10,c=10
代码:
#include<stdio.h>
int main(){
//特殊的运算符,赋值运算符=
//1.= 只能用于给变量赋值,常量与数组不能用
int a1 = 100;
int b1 = 200;
printf("%d\n",a1);
printf("%d\n",b1);
//2. 可以连续使用 a1 = b1 = 100 <=> a1 = 100,b1 = 100;
a1 = b1 = 100;
printf("%d,%d",a1,b1);
}
运行结果:
2.复合运算符
a += b;
a -= b;
a *= b;
a /= b;
a %= b;
a &= b;
a |= b;
a ^= b;
a >>= 1;
a <<= 2;
复合运算符其实就是赋值运算符与其他的运算符相结合:例如 a+=b 等价于 a = a+b,其他的复合运算符类似。
代码:
#include<stdio.h>
int main(){
int a = 10;
int b = 20;
//复合运算符 += -= *= /= %= &= |= ^= >>= <<= 。 a+=b <=> a = a+b 其余类似。
// +=
a += 100;
b += 100;
printf("%d,%d\n",a,b);
// -=
a -= 10;
b -= 10;
printf("%d,%d\n",a,b);
// *=
a *= 10;
b *= 10;
printf("%d,%d\n",a,b);
// /=
a /= 10;
b /= 10;
printf("%d,%d\n",a,b);
// %=
a %= 3;
b %= 3;
printf("%d,%d\n",a,b);
// &=
a &= 10;
b &= 10;
printf("%d,%d\n",a,b);
// |=
a |= 20;
b |= 5;
printf("%d,%d\n",a,b);
// ^=
a ^= 10;
b ^= 10;
printf("%d,%d\n",a,b);
// >>= 与 <<=
a >>= 1;
b <<= 1;
printf("%d,%d\n",a,b);
}
运行结果:
3.sizeof运算符
用于计算变量或者变量类型所占的字节数
代码:
#include<stdio.h>
int main(){
//sizeof 运算符,用于计算变量或数据类型所占的字节数。
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(short));
printf("%d\n",sizeof(char));
char c;
printf("%d\n",sizeof(c));
}
运行结果:
4.return运算符
用于返回数据和结束函数。
5.条件运算符
格式:表达式1 ? 表达式2: 表达式3(表达式1满足,选择表达式2,表达式1不满足则选择表达式3)
代码:
#include<stdio.h>
int main(){
int a = 10;
int b = 20;
//条件运算符 a>b?a:b 当a>b成立时选a,不成立选b。
printf("%d",a>b?a:b);
}
运行结果:
六、运算符的优先级
总结
运算符很基础,多练练敲敲代码就能掌握了。