- 算数操作符
- 移位操作符
- 位操作符
- 赋值操作符
- 单目操作符
- 关系操作符
- 逻辑操作符
- 逗号表达式
| 加 | 减 | 乘 | 除 | 取余 |
|---|---|---|---|---|
| + | - | * | / | % |
1.除了取余%操作符外,其他的操作符可以作用于整数和浮点数;
2.对于除/操作符,如果两个操作数都为整数,则执行整数除法;而操作数只要有浮点数执行的就是浮点数除法;
3.取余%操作符的两个操作数必须为整数,返回的是整除之后的余数。
#include移位操作符void main() { int a = 3, b = 2; double c = 1.5; printf("a + b = %dn", a + b); //5 printf("a - b = %dn", a - b); //1 printf("a * b = %dn", a * b); //6 printf("a / b = %dn", a / b); //1 printf("a %% b = %dn", a % b); //1 printf("a + c = %.2fn", a + c); //4.50 printf("a - c = %.2fn", a - c); //1.50 printf("a * c = %.2fn", a * c); //4.50 printf("a / c = %.2fn", a / c); //2.00 }
| 左移 | 右移 |
|---|---|
| << | >> |
左移操作符移位规则:
左边抛弃,右边补0;
右移操作符移位规则:
右移运算分为两种:
1.逻辑移位,左边用0填充,右边丢弃;
2.算术移位,左边用原该值的符号位填充,右边丢弃。
如果操作数是无符号数即是逻辑移位,如果操作数是带符号数,是算术移位。
代码示例:
正整数a左移n位的值为(a*(2^n));
正整数a右移n位的值为(a/(2^n));
#include位操作符void main() { int a = 10; //0000 0000 0000 0000 0000 0000 0000 1010 //0000 0000 0000 0000 0000 0000 0010 1000 -- 左移 //0000 0000 0000 0000 0000 0000 0000 0010 -- 右移 printf("%dn", a << 2); //40 printf("%dn", a >> 2); //2 //算数右移 int b = -10; //补码1111 1111 1111 1111 1111 1111 1111 0110 //补码1111 1111 1111 1111 1111 1111 1101 1000 -- 左移 //原码1000 0000 0000 0000 0000 0000 0010 1000 -- 左移 //补码1111 1111 1111 1111 1111 1111 1111 1101 -- 右移 //原码1000 0000 0000 0000 0000 0000 0000 0011 -- 右移 printf("%dn", b << 2); //-40 printf("%dn", b >> 2); //-3 }
| 按位与 | 按位或 | 按位异或 |
|---|---|---|
| & | | | ^ |
其操作数必须位整数
代码示例:
#include赋值操作符void main() { int num1 = 1; int num2 = 2; //1--0000 0000 0000 0000 0000 0000 0000 0001 //2--0000 0000 0000 0000 0000 0000 0000 0010 int x = num1 & num2; //0 int y = num1 | num2; //3 int z = num1 ^ num2; //3 printf("%d %d %d", x, y, z); }
| 符号 | 表达式 | 含义 |
|---|---|---|
| = | a = 10 | 将10赋给a |
| += | a += 10 | a = a+10 |
| -= | a -= 10 | a = a-10 |
| *= | a *= 10 | a = a*10 |
| /= | a /= 10 | a = a/10 |
| %= | a %= 10 | a = a%10 |
| >>= | a >>= 10 | a = a>>10 |
| <<= | a <<= 10 | a = a<<10 |
| &= | a &= 10 | a = a&10 |
| |= | a |= 10 | a = a|10 |
| ^= | a ^= 10 | a = a^10 |
| 符号 | 含义 | 符号 | 含义 | ||
|---|---|---|---|---|---|
| ! | 逻辑取反 | ~ | 按位取反 | ||
| - | 负值 | - - | 自减 | ||
| + | 正值 | ++ | 自增 | ||
| & | 取地址 | * | 间接访问操作符(解引用操作符) | ||
| (类型) | 强制类型转换 | sizeof | 操作数的类型长度(以字节为单位) |
注意:sizeof是操作符,可以求变量(类型)所占空间的大小
| 前++或前- - | 后++或后- - |
|---|---|
| 先自增或自减再进行其他运算 | 先进行其他运算后再自增或自减 |
| 符号 | 含义 |
|---|---|
| > | 大于 |
| >= | 大于等于 |
| < | 小于 |
| <= | 大于 |
| != | 用于测试“不相等” |
| == | 用于测试“相等” |
逻辑操作符在编程过程中注意==与=的使用
| 逻辑与 | 逻辑或 |
|---|---|
| && | || |
对于按位操作符和逻辑操作符要加以区分
逻辑操作符会返回一个布尔值
代码示例:
#includevoid main() { printf("1&&2 = %dn", 1 && 2); //1 printf("1&2 = %dn", 1 & 2); //0 printf("1||2 = %dn", 1 || 2); //1 printf("1|2 = %dn", 1 | 2); //3 }
逻辑与&&与逻辑或||都是短路操作符;
当逻辑与&&的第一个操作数为假时便不再往后执行,结果必为假;
当逻辑或||的第一个操作数为真时便不再往后执行,结果必为真。
代码示例:
#includevoid main() { int i = 0, a = 0,b = 2,c = 3, d = 4; i = a++ && ++b && d++; printf("i=%dn", i); //0 printf("a=%dn", a); //1 printf("b=%dn", b); //2 printf("c=%dn", c); //3 printf("d=%dn", d); //4 }
条件操作符
| exp1 ? exp2 : exp3 |
|---|
| 当exp1为真时,结果为exp2;否则结果为exp3 |
#include逗号表达式void main() { int a = 6; int b; if (a < 5) { b = 3; } else { b = -3; } printf("b = %dn", b); //-3 //上述if-else语句可以用条件操作符实现 int c; c = (a < 5) ? 3 : -3; printf("c = %dn", c); //-3 }
| exp1, exp2, …, expN |
|---|
用逗号隔开多个表达式,从左向右依次执行;
整个表达式的结果时最后一个表达式的结果。
代码示例:
#includevoid main() { int a = 1; int b = 2; int c = (a > b, a = b + 10, a, b = a + 1); printf("c = %dn", c); //13 int d = -3; if (a = b + 1, c = a / 2, d > 0) //d<0,所以执行else { printf("真n"); } else { printf("假n"); //将会输出这句 } }



