C语言的操作符分为以下10种:
算术操作符 | 移位操作符 |
---|---|
算术操作符 | 移位操作符 |
位操作符 | 赋值操作符 |
单目操作符 | 关系操作符 |
逻辑操作符 | 条件操作符 |
逗号表达式 | 下标引用、函数调用和结构成员 |
一、算术操作符
+ | - | * | / | % |
---|---|---|---|---|
加 | 减 | 乘 | 除 | 取模(余) |
+, -, *, 一般的简单运算就不做事例了。
除号的两端有一个是小数,执行的就是小数除法。
int a = 9/2;
float b = 9/2;
float c = 9/2.0;
a的结果是:4
b的结果是:4.000000
c的结果是:4.500000
int a = 9%2;
a的结果是:1
二、移位操作符
<<左移操作符 | >>右移操作符 |
---|
移位操作符 - - 移动的是二进制位
int a = 2;
int b = a << 1; //a的二进制也就是2的二进制位向左移动一位
b的结果是:4
解题思路:
2的二进制是10
a是要放进整型里的,整型是4个字节,一个字节是8个比特位
a的二进制序列(也就是2的二进制序列) 就是32个比特位(32比特位=4个字节X8个比特位)
去掉前面的一个0,后面补一个0
二进制的后面100这个1代表的是2的2次方。
右移操作符类似
三、位操作符
& | I | ^ |
---|
&:按位与(有0为0)
| :按位或(有1为1)
^:按位异或(相同为0,不同为1)
四、赋值操作符
+= | -= | *= | /= | &= |
---|---|---|---|---|
= | ^= | I= | >>= | <<= |
int a = 2;
a += 3;
a %= 3;
上面的+=,%=这种叫复合赋值,其实a += 3和a = a +3是一样的。
它们实际上是一种缩写形式,使得对变量的改变更为简洁。
五、单目操作符
! | 逻辑反操作 |
---|---|
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
- - | 前置、后置- - |
++ | 前置、后置++ |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
单目操作符:只有一个操作数。例:!a
双目操作符:有两个操作数。例:a+b
!:真的取假的,假的取真的。
+、-:a = -a,a = +a(通常正值不写+号)
sizeof是操作符不是函数,计算类型、数组或者变量的大小,计算变量时可以不加括号。
数组:
~:把所有二进制位中数字,1变成0,0变成1
int a = 0;
printf("%d", ~a);
a的结果是:-1
解题思路:
注!整数在内存中存储的是补码
注!整数在内存中存储的是补码
注!整数在内存中存储的是补码
重要的事情说三遍
一个整数的二进制表示有三种:原码,反码,补码
-1:
一个整数它的最高位表示符号位,最高位1表示负数
因为是-1它的最高位是1
10000000000000000000000000000001(原码)
最高位是符号位,后面是有效位
表示的十进制是1,(我们平常使用的就是十进制)
11111111111111111111111111111110(反码)
符号位不变其它位按位取反
11111111111111111111111111111111(补码)√
反码的二进制加1得到的就是补码
这些是对负数的计算
正整数
三码相同
原码的取反+1得到补码,补码-1得到反码,反码取反得到原码
++:前置++(先++,后使用)后置++(先使用,再++)- -类似
int a = 10;
int b = ++a;
printf("%d", b);
printf("%d", a);
int c = 20;
int d = a++;
printf("%d", d);
printf("%d", c);
b的结果是:11
a的结果是:11
d的结果是:10
c的结果是:11
(类型):强制类型转换,会丢失精度
int a = (int)3.14;
printf("%d\n", a);
a的结果是:3
六、关系操作符
> | >= | != |
---|---|---|
< | <= | == |
!=是不等于,==是相等
七、逻辑操作符
&& | 逻辑与 |
---|---|
II | 逻辑或 |
&&:两个都得满足
||:只需一个满足
八、条件操作符
也叫三目操作符
exp1 ? exp2 : exp3
exp1是判断条件,为真执行exp2,为假执行exp3
例:
exp1 成立,exp2计算,整个表达式的结构是:exp2的结果
exp1 不成立,exp3计算,整个表达式的结构是:exp3的结果
int a = 0;
int b = 3;
int max = 0;
if (a > b)
max = a;
else
max = b;
max = a > b ? a : b;
printf("%d\n", max);
max的结果是:3
九、逗号表达式
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
十、下标引用、函数调用和结构成员
1.[ ] 下标引用操作符
操作数:一个数组名 + 一个索引值
int arr[5] = {1,2,3,4,5};
printf("%d", arr[3]);
结果是:4
2.( ) 函数调用操作符
调用函数的时候,函数名后的()就是函数调用操作符。
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
3.访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名
& | * | . | -> |
---|
这四个是我目前没学到的操作符