C语言:运算符和判断
C语言提供了以下运算法
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 杂项运算符
算术运算符
加 +、减 -、乘 *、除 /、求余 % 、自加 ++、自减 --
# include <stdio.h> int main() { int a = 4; // 声明定义和初始化 int b = 2; // 声明定义和初始化 int c; // 声明定义 c = a + b; // 加 6 c = a - b; // 减 2 c = a * b; // 乘 8 c = a / b; // 除 2 c = a % b; // 求余 0 }
a++ 先赋值再自加
++a 先自加再赋值
# include <stdio.h> int main() { int c; // 声明定义 int a = 4; // 声明定义和初始化 c = a++; // 自加 printf("先赋值再运算"); printf("%d\n", c); // 4 printf("%d\n", a); // 5 a = 4; // 声明定义和初始化 c = a--; // 自减 printf("%d\n", c); // 4 printf("%d\n", a); // 3 printf("先运算再赋值"); a = 4; // 声明定义和初始化 c = ++a; // 自加 printf("%d\n", c); // 5 printf("%d\n", a); // 5 a = 4; // 声明定义和初始化 c = --a; // 自减 printf("%d\n", c); // 3 printf("%d\n", a); // 3 }
关系运算符
判断相等 ==、判断不等 !=、大于 >、小于<、大于等于 >=、小于等于 <=
注意:C语言中没有这种级联写法 a<b<c ,正确的写法应为 a<b && b<c
逻辑运算符
- 与 &&:同真为真
- 或 || :有一个真,为真
- 非 !:转换,真变假,假变真
位运算符
位运算符作用于位,并逐位执行操作。
- 按位与 &
- 按位或 |
- 按位异或 ^
- 取反 ~
- 二进制左移运算符 <<
- 二进制右移运算符 >>
C语言中移位运算比乘除法效率更高,右移是除法,左移是乘法,
- 移1位=$2^1=2$
- 移2位=$2^2=4$
- 移3位=$2^3=8$
- 移4位=$2^4=16$
a = a << 3; // a=a*8; b = b >> 3; // ab=b/8; a = a * 9; // 分析a*9可以拆分成a*(8+1)即a*8+a*1, 因此可以改为: a=(a<<3)+a a = a * 7; //分析a*7可以拆分成a*(8-1)即a*8-a*1, 因此可以改为: a=(a<<3)-a
注意:
只有整型数据才能用移位替代乘除法,如:char、short、int、long、unsigned char、unsigned short、unsigned int、unsigned long。(double、float、bool、long double则不可以进行移位操作)
有符号数据类型移位需要注意符号位:
- 对负数进行左移:符号位始终为1,其他位左移。
- 对正数进行左移:所有位左移,即 <<,如果超出int能表达的返回可能会变成负数。
- 对正数进行右移:所有位右移,即 >>
赋值运算符
简单赋值 = ;a=10
+=、-=、*=、/=、%=等等,a+=1等于a=a+1
其他运算符
sizeof() | 返回变量的大小 | sizeof(a) 将返回 4,其中 a 是整数 |
& | 返回变量的地址 | &a; 将给出变量的实际地址 |
* | 指向一个变量 | *a; 将指向一个变量 |
? : | 条件表达式 | 如果条件为真 ? 则值为 X : 否则值为 Y |
判断语句
if 语句
if(布尔值为真) { /* 如果布尔表达式为真将执行的语句 */ }
if ... else 语句
if(布尔值为真) { /* 如果布尔表达式为真将执行的语句 */ } else { /* 如果布尔表达式为假将执行的语句 */ }
if...else if...else 语句
if(boolean_expression 1) { /* 当布尔表达式 1 为真时执行 */ } else if( boolean_expression 2) { /* 当布尔表达式 2 为真时执行 */ } else if( boolean_expression 3) { /* 当布尔表达式 3 为真时执行 */ } else { /* 当上面条件都不为真时执行 */ }
switch 语句
#include <stdio.h> int main () { /* 局部变量定义 */ char grade = 'B'; switch(grade) { case 'A' : printf("成绩为A \n" ); break; case 'B' : printf("成绩为B \n" ); break; case 'C' : printf("成绩为C \n" ); break; case 'D' : printf("成绩为D \n" ); break; case 'F' : printf("成绩为E \n" ); break; default : printf("不及格 \n" ); } return 0; }