基本运算符
运算符 | 含义 |
---|---|
= | 赋值运算符,从右往左 |
+ | 加法,使两侧相加,二元运算符 |
+ | 减法,二元运算符 |
-和+ | 减号可标明或改变一个值的代数符号 |
* | 乘法 |
/ | 除法 |
关系运算符
运算符 | 含义 |
---|---|
< | 小于 |
<= | 小于或等于 |
== | 等于 |
>= | 大于或等于 |
> | 大于 |
!= | 不等于 |
运算符优先级
运算符优先级(从高到低)
运算符 | 结合律 |
---|---|
() | 从左往右 |
- + ++ - - sizeof | 从右往左 |
* / % | 从左往右 |
+ - | 从左往右 |
< > <= >= | 从右往左 |
== != | 从左往右 |
= | 从右往左 |
其他运算符
c语言大约有40个运算符
sizeof运算符和size_t类型
#include<stdio.h>
int main()
{
int n=0;
size_t intsize=sizeof(int);
printf("n=%d,%u,%u",n,sizeof n,intsize);
}
0,4,4
- 语言规定,sizeof返回size_t类型,这是一个无符号整数类型。c有一个typedef机制,运行程序员为现有类型创建别名列如:
typedef double real;//这样real就是double的别名,可以使用real声明一个变量
real deal;//使用typedef
- 类似的,c头文件系统可以使用typedef把size_t作为unsigned int 或unsigned long的别名,这样在使用size_t类型时,编译器会根据不同的系统替换标准类型
求模运算符:%
求模运算符用与整数运算。求模运算符给出其左侧整数除以右侧整数的余数。如:13%5得3。只能用于整数的运算
//把描述转换成分和秒
#include<stdio.h>
#define SEC_PER_MIN 60
int main()
{
int sec,min,left;
printf("请输入秒数\n");
printf("输入数字如果小于等于0则退出!\n");
scanf("%d",&sec);
while(sec>0)
{
min=sec/SEC_PER_MIN;
left=sec%SEC_PER_MIN;
printf("%d秒=%d分%d秒\n",sec,min,left);
printf("输入数字如果小于等于0则退出!\n");
scanf("%d",sec);
}
printf("bye~");
return 0;
}
请输入秒数
输入数字如果小于等于0则退出!
90
90秒=1分30秒
输入数字如果小于等于0则退出!
0
bye~
自增(++)、自减(- -)运算符:
自增(++)、自减(- -)运算符作用是使变量的值加1或减1。分为两种形式:前缀形式和后缀形式
- 前缀形式:q = ++i;//首先,i递增1;然后把结果赋给q
- 后缀形式:q = i++;//首先,将i赋给q;然后i递增1
#include<stdio.h>
int main()
{
int i,j,q;
i=3;
j=i++;
q=++i;
printf("j=%d q=%d",j,q);
return 0;
}
j=3 q=5;
- 首先,i的值赋给j,此时j等于3;然后i递增1;此时i等于4;
- 到下一条语句,i先递增1,此时i等于5,赋给q,所以q等于5;
例如:计算多个不同鞋码对应的脚长
#include<stdio.h>
#define ADJUST 7.31
int main()
{
const double SCALE =0.333;
double shoe,foot;
shoe=2.0;
while(++shoe<18.5)
{
foot=SCALE*shoe+ADJUST;
printf("%10.1f %20.2f inche\n",shoe,foot);
}
return 0;
}
3.0 8.31 inche
4.0 8.64 inche
5.0 8.97 inche
6.0 9.31 inche
7.0 9.64 inche
8.0 9.97 inche
9.0 10.31 inche
10.0 10.64 inche
11.0 10.97 inche
12.0 11.31 inche
13.0 11.64 inche
14.0 11.97 inche
15.0 12.31 inche
16.0 12.64 inche
17.0 12.97 inche
18.0 13.30 inche
- 运行过程:首先,shoe递增1,然后和18.5比较。如果递增后的值小于18.5,则执行花括号里的语句。然后,shoe在递增1,重复刚才的步骤,知道shoe的值不小于18.5为止。
优先级
自增、自减优先级很高,仅次于圆括号。比如:x * y++实际上是x*(y++),而不是(x*y)++,后者无效。因为自增自减运算符只能影响一个变量,普遍的说只能影响一个可修改的左值,x * y本身是不可修改的左值。
列如:x=2;n=3; nextnum=(y + n++)*6=?
把各值带入nextnum=5 * 6=30
- 如果n++只是表达式的一部分,可将其视为"先使用n,再递增";而++n,则表示"先递增,在使用"