+加法,-减法,*乘法,/除法,%取模
- %操作符的两个操作数必须为整数。7%2=1
- +-*/四个操作符可以作用于整数和浮点数。
- /操作符的两个操作数都为整数时,执行整数除法。只要有一个是浮点数,执行浮点数除法。7/2=3,7.0/2=3.5,7/2.0=3.5,7.0/2.0=3.5
<<左移,>>右移
2.1 左移操作符整数的二进制表示有3种:原码、反码、补码。正整数的原码、反码、补码相同。负整数的反码是原码符号位不变,其他位按位取反,补码是反码+1。整数在内存中存储的是补码。
7:
原码:00000000000000000000000000000111
反码:00000000000000000000000000000111
补码:00000000000000000000000000000111
-7:
原码:10000000000000000000000000000111
反码:11111111111111111111111111111000
补码:11111111111111111111111111111001
移位规则:左边抛弃,右边补0。
2.2 右移操作符int a = 7;
int b = a<<1;
0[00000000000000000000000000001110]
int a = -7;
int b = a<<1;
1[11111111111111111111111111110010]
移位规则:
- 逻辑移位:左边补0,右边抛弃。
- 算术移位:左边补原符号位,右边抛弃。(常见编译器都是算术移位)
3. 位操作符算术移位:
int a = 7;
int b = a>>1;
[00000000000000000000000000000011]1
int a = -7;
int b = a<<1;
[11111111111111111111111111111100]1
&按位与,|按位或,^按位异或
位操作符通过逐位比较两个运算对象,生成一个新值。对于每个位:
- &:两个操作数相应的位都为1,结果为1。
- |:两个操作数相应的位至少有一个为1,结果为1。
- ^:两个操作数相应的位只有一个为1,结果为1。
3的补码:00000000000000000000000000000011
-5的补码:11111111111111111111111111111011
int a = 3;
int b = -5;
int c = a & b;
00000000000000000000000000000011
int c = a | b;
11111111111111111111111111111011
int c = a ^ b;
11111111111111111111111111111000
3^3:
011
011
000
->a^a=0
0^3:
000
011
011
->0^a=a
//不创建临时变量实现两个数的交换 #include4. 赋值操作符int main() { int a = 10; int b = 20; a = a ^ b;//10^20 b = a ^ b;//10^20^20=10^0=10(^操作符支持交换律) a = a ^ b;//10^20^10=0^20=20 printf("a = %d b = %dn", a, b); return 0; }
=赋值
复合赋值符:+=,-=,*=,/=,%=,<<=,>>=,&=,|=,^=
如,x += 10; 等价于x = x + 10;
5. 单目操作符!逻辑反操作
-负值,+正值
&取地址,*间接访问操作符(解引用操作符)
sizeof计算变量或类型所创建的变量的长度(单位:字节)
~对一个数的二进制按位取反
++自增,--自减(前置++:先++,后使用,后置++:先使用,后++)
(类型)强制类型转换
6. 关系操作符>大于,>=大于或等于,<小于,<=小于或等于,!=不相等,==相等
7. 逻辑操作符&&逻辑与,||逻辑或
8. 条件操作符exp1?exp2:exp3
先求解exp1,若其值为真,则将exp2的值作为整个表达式的取值,否则将exp3的值作为整个表达式的取值。
9. 逗号表达式exp1,exp2,exp3,...,expN
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
10. 下标引用操作符[]下标引用操作符
操作数:一个数组名+一个索引值。如,arr[9]。
11. 函数调用操作符接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
如,test(),Add(a,b)。
12. 结构成员访问操作符. 结构体.成员名
->结构体指针->成员名



