3.运算符与表达式
3.2 算术运算符与关系运算符
3.2.1 运算符分类
运算符 | 举例 |
---|---|
算术运算符 | + - * / % |
关系运算符 | < > == <= >= != |
逻辑运算符 | ! && || |
赋值运算符 | = |
求字节数运算符 | sizeof |
强制类型转换运算符 | (类型) |
位运算符 | << >> ~ | ^ & |
指针运算符 | * & |
分量运算符 | .-> |
下标运算符 | [] |
3.2.2 算术运算符及算术表达式
- 乘除取余优先级大于加减
- 除%外,算术运算符都适用于整数型和浮点型计算,%只能用于整数型计算
- 除号/两侧操作数都是整型数时,执行整除运算,其他情况下,执行浮点型除法
#include <stdio.h>
int main() {
int res;
res = 4+5*2-6/3+10%4;
printf("%d\n",res);
return 0;
}
3.2.3 关系运算符与关系表达式
- 关系表达式只有真和假,C没有布尔类型,因此0为假,1为真
- 等于运算符的技巧,将常量写在左边,变量写在右边,如5==a
- 三个值以上的等于判断,不能连着写,如“a==b==c”应该写成“a==b && b==c”
- 三个值以上的比较判断,不能连着写,如“25<a<50”,应写成“a>25 && a<50”
#include <stdio.h>
int main() {
int a;
while (scanf("%d", &a)) //输入非整型时结束while循环
{
if(3<a<5) //无论输入什么数都是正确的,因为0或1都小于5
{
printf("a is between 3 and 5\n");
}else
{
printf("a is not between 3 and 5\n");
}
}
return 0;
}
3.2.4 运算符优先级
简单说就是:!>算术运算符>关系运算符>&&>||>赋值运算符
3.3 逻辑运算符、赋值运算符、求字节运算符
3.3.1 逻辑运算符与逻辑表达式
- 逻辑非优先级高于算术运算符,逻辑或、逻辑与优先级低于关系运算符
#include <stdio.h>
int main() {
int year;
while(scanf("%d",&year))
{
if(year%4==0 && year%100!=0 || year%400==0)
{
printf("It's a leap year!\n");
}else{
printf("It's not a leap year!\n");
}
}
return 0;
}
- 短路运算:逻辑与短路计算,当前面表达式为假时,后面内部不执行;逻辑或短路计算,当前面表达式为真时,后面内部不执行;
// 短路运算
int main() {
int i=0;
i&&printf("You can't see me!\n"); //逻辑与,前面为0时后面不输出
i=1;
i||printf("You can't see me!\n"); //逻辑或,前面为1时后面不输出
return 0;
}
3.3.2 赋值运算符
- 左值:赋值运算符左边的值,右值:赋值运算符右边的值
- 被赋值的变量必须放在左边
- 复合赋值运算,即可以对变量自身运算,简化代码
#include <stdio.h>
int main() {
int i=10,j=3;
i+=5;
j*=i;
printf("i=%d,\nj=%d\n",i,j);
return 0;
}
3.3.3 求字节运算符sizeof
- sizeof是运算符,不是函数
- sizeof可以求常量或变量的空间大小
#include <stdio.h>
int main() {
int i=5;
printf("i size is %d\n",sizeof(i));
return 0;
}