目录
1 .算术操作符
假设变量 A 的值为 10,变量 B 的值为 20;
+ 把两个操作数相加 A + B 将得到 30 - 从第一个操作数中减去第二个操作数 A - B 将得到 -10 * 把两个操作数相乘 A * B 将得到 200 / 分子除以分母 B / A 将得到 2 % 取模运算符,整除后的余数 B % A 将得到 0 注:
1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数;2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法;3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数;实例:#include <stdio.h> int main() { int a = 21; int b = 10; int c ; c = a + b; printf("Line 1 - c 的值是 %d\n", c ); c = a - b; printf("Line 2 - c 的值是 %d\n", c ); c = a * b; printf("Line 3 - c 的值是 %d\n", c ); c = a / b; printf("Line 4 - c 的值是 %d\n", c ); c = a % b; printf("Line 5 - c 的值是 %d\n", c ); c = a++; // 赋值后再加 1 ,c 为 21,a 为 22 printf("Line 6 - c 的值是 %d\n", c ); c = a--; // 赋值后再减 1 ,c 为 22 ,a 为 21 printf("Line 7 - c 的值是 %d\n", c ); return 0 }
结果如下:
Line 1 - c 的值是 31 Line 2 - c 的值是 11 Line 3 - c 的值是 210 Line 4 - c 的值是 2 Line 5 - c 的值是 1 Line 6 - c 的值是 21 Line 7 - c 的值是 22
2 .移位操作符
1)<< 左移操作符2)>> 右移操作符注:
移位操作符的操作数只能是整数
1. 左移操作符(<<)
移位规则:左边抛弃、右边补 0![]()
2.右移操作符
首先右移运算分两种:1. 逻辑移位左边用 0 填充,右边丢弃![]()
2. 算术移位左边用原该值的符号位填充,右边丢弃![]()
实例:
#include <stdio.h> int main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a << 2; /* 240 = 1111 0000 */ printf("Line 5 - c 的值是 %d\n", c ); c = a >> 2; /* 15 = 0000 1111 */ printf("Line 6 - c 的值是 %d\n", c ); return 0; }
结果如下:
Line 5 - c 的值是 240 Line 6 - c 的值是 15
3. 位操作符
& // 按位与| // 按位或^ // 按位异或注:
他们的操作数必须是整数位运算符作用于位,并逐位执行操作 ,&、 | 和 ^ 的真值表如下所示:
p q p & q p | q p ^ q 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1 1 假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
下表显示了 C 语言支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:
实例:
运算符 描述 实例 & 按位与操作,按二进制位进行"与"运算。运算规则:
0&0=0; 0&1=0; 1&0=0; 1&1=1;(A & B) 将得到 12,即为 0000 1100 | 按位或运算符,按二进制位进行"或"运算。运算规则:
0|0=0; 0|1=1; 1|0=1; 1|1=1;(A | B) 将得到 61,即为 0011 1101 ^ 异或运算符,按二进制位进行"异或"运算。运算规则:
0^0=0; 0^1=1; 1^0=1; 1^1=0;(A ^ B) 将得到 49,即为 0011 0001 ~ 取反运算符,按二进制位进行"取反"运算。运算规则:
~1=-2; ~0=-1;(~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式 #include <stdio.h> int main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a & b; /* 12 = 0000 1100 */ printf("Line 1 - c 的值是 %d\n", c ); c = a | b; /* 61 = 0011 1101 */ printf("Line 2 - c 的值是 %d\n", c ); c = a ^ b; /* 49 = 0011 0001 */ printf("Line 3 - c 的值是 %d\n", c ); c = ~a; /*-61 = 1100 0011 */ printf("Line 4 - c 的值是 %d\n", c ); return 0; }
结果如下:
Line 1 - c 的值是 12 Line 2 - c 的值是 61 Line 3 - c 的值是 49 Line 4 - c 的值是 -61
4. 赋值操作符
下表列出了 C 语言支持的赋值运算符:
实例:
运算符 描述 实例 = 简单的赋值运算符,把右边操作数的值赋给左边操作数 C = A + B 将把 A + B 的值赋给 C += 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 C += A 相当于 C = C + A -= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 C -= A 相当于 C = C - A *= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 C *= A 相当于 C = C * A /= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 C /= A 相当于 C = C / A %= 求模且赋值运算符,求两个操作数的模赋值给左边操作数 C %= A 相当于 C = C % A <<= 左移且赋值运算符 C <<= 2 等同于 C = C << 2 >>= 右移且赋值运算符 C >>= 2 等同于 C = C >> 2 &= 按位与且赋值运算符 C &= 2 等同于 C = C & 2 ^= 按位异或且赋值运算符 C ^= 2 等同于 C = C ^ 2 |= 按位或且赋值运算符 C |= 2 等同于 C = C | 2 #include <stdio.h> int main() { int a = 21; int c ; c = a; printf("Line 1 - = 运算符实例,c 的值 = %d\n", c ); c += a; printf("Line 2 - += 运算符实例,c 的值 = %d\n", c ); c -= a; printf("Line 3 - -= 运算符实例,c 的值 = %d\n", c ); c *= a; printf("Line 4 - *= 运算符实例,c 的值 = %d\n", c ); c /= a; printf("Line 5 - /= 运算符实例,c 的值 = %d\n", c ); c = 200; c %= a; printf("Line 6 - %%= 运算符实例,c 的值 = %d\n", c ); c <<= 2; printf("Line 7 - <<= 运算符实例,c 的值 = %d\n", c ); c >>= 2; printf("Line 8 - >>= 运算符实例,c 的值 = %d\n", c ); c &= 2; printf("Line 9 - &= 运算符实例,c 的值 = %d\n", c ); c ^= 2; printf("Line 10 - ^= 运算符实例,c 的值 = %d\n", c ); c |= 2; printf("Line 11 - |= 运算符实例,c 的值 = %d\n", c ); return 0; }
结果如下:
Line 1 - = 运算符实例,c 的值 = 21 Line 2 - += 运算符实例,c 的值 = 42 Line 3 - -= 运算符实例,c 的值 = 21 Line 4 - *= 运算符实例,c 的值 = 441 Line 5 - /= 运算符实例,c 的值 = 21 Line 6 - %= 运算符实例,c 的值 = 11 Line 7 - <<= 运算符实例,c 的值 = 44 Line 8 - >>= 运算符实例,c 的值 = 11 Line 9 - &= 运算符实例,c 的值 = 2 Line 10 - ^= 运算符实例,c 的值 = 0 Line 11 - |= 运算符实例,c 的值 = 2
5. 单目操作符
! 逻辑反操作- 负值+ 正值& 取地址sizeof 操作数的类型长度(以字节为单位)~ 对一个数的二进制按位取反-- 前置、后置 --++ 前置、后置 ++* 间接访问操作符 ( 解引用操作符 )( 类型 ) 强制类型转换注:
这里主要介绍sizeof,++,--三个操作符
sizeof:
很多人会误以为它是一个库函数,其实不是,它实际上是一个操作符,我们可以简单简单举个例子证明一下:
int main() { int arr[10] = { 0 }; printf("%d", sizeof arr); return 0; }
这里就很好的看出来sizeof是一个操作符了,因为这样编译,编译器没有报错,如果是sizeof是函数的话,后面必须加个括号才可以编译过去
++ --
前置++:就是先+1,再使用其值
后置++:就是先使用其值,再进行+1
//关于前置++和后置++的区别 int main() { int a = 0;//定义一个整形变量 a = 3;//赋初值 printf("%d", a++);//----输出3 printf("%d", ++a);//----输出4 //总结上面,后置++,先使用a的值,再进行++,前置++,先进行++的操作,再使用a的值。 return 0; }
//关于前置--和后置--的区别 int main() { int a = 0;//定义一个整形变量 a = 3;//赋初值 printf("%d", a--);//----输出3 printf("%d", --a);//----输出2 //总结上面,后置--,先使用a的值,再进行--,前置--,先进行--的操作,再使用a的值。 return 0; }
补充:
int main() { int a = 0;//定义一个整形变量 a = 3;//赋初值 a++;//进行一个++操作 printf("%d", a);//----此时输出的就是4了,因为上面已经有个++的操作了 return 0; }
6. 关系操作符
下表显示了 C 语言支持的所有关系运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
实例:
运算符 描述 实例 == 检查两个操作数的值是否相等,如果相等则条件为真。 (A == B) 为假。 != 检查两个操作数的值是否相等,如果不相等则条件为真。 (A != B) 为真。 > 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 (A > B) 为假。 < 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 (A < B) 为真。 >= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 (A >= B) 为假。 <= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 (A <= B) 为真。 #include <stdio.h> int main() { int a = 21; int b = 10; int c ; if( a == b ) { printf("Line 1 - a 等于 b\n" ); } else { printf("Line 1 - a 不等于 b\n" ); } if ( a < b ) { printf("Line 2 - a 小于 b\n" ); } else { printf("Line 2 - a 不小于 b\n" ); } if ( a > b ) { printf("Line 3 - a 大于 b\n" ); } else { printf("Line 3 - a 不大于 b\n" ); } /* 改变 a 和 b 的值 */ a = 5; b = 20; if ( a <= b ) { printf("Line 4 - a 小于或等于 b\n" ); } if ( b >= a ) { printf("Line 5 - b 大于或等于 a\n" ); } return 0; }
结果如下:
Line 1 - a 不等于 b Line 2 - a 不小于 b Line 3 - a 大于 b Line 4 - a 小于或等于 b Line 5 - b 大于或等于 a
7.逻辑操作符
下表显示了 C 语言支持的所有关系逻辑运算符。假设变量 A 的值为 1,变量 B 的值为 0,则:
实例:
运算符 描述 实例 && 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 (A && B) 为假。 || 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 (A || B) 为真。 ! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 !(A && B) 为真。 #include <stdio.h> int main() { int a = 5; int b = 20; int c ; if ( a && b ) { printf("Line 1 - 条件为真\n" ); } if ( a || b ) { printf("Line 2 - 条件为真\n" ); } /* 改变 a 和 b 的值 */ a = 0; b = 10; if ( a && b ) { printf("Line 3 - 条件为真\n" ); } else { printf("Line 3 - 条件为假\n" ); } if ( !(a && b) ) { printf("Line 4 - 条件为真\n" ); } return 0; }
结果如下:
Line 1 - 条件为真 Line 2 - 条件为真 Line 3 - 条件为假 Line 4 - 条件为真
8. 条件操作符
格式: exp1 ? exp2 : exp3
? : 条件表达式 如果条件为真 ? 则值为 X : 否则值为 Y int a = 10; int b = (a == 1) ? 20: 30; printf( "b 的值是 %d\n", b ); int b = (a == 10) ? 20: 30; printf( "b 的值是 %d\n", b );
结果如下:
b 的值是 30 b 的值是 20
9.逗号表达式
逗号表达式,就是用逗号隔开的多个表达式。逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。实例:
int main() { int a = 1; int b = 3; printf("%d", (a = a + b, b)); return 0; }
结果如下:
通过结果可以看出,逗号表达式从左向右依次执行,但是整个表达式的值取最后一个表达式的值;
如果对上文有意见或者有错误,还请大佬们斧正,觉得有帮助的童鞋们,蟹蟹三连!