前言
C语言中,操作符主要分为以下几类:
1.算术操作符
2.移位操作符
3.位操作符
4.赋值操作符
5.单目操作符
6.关系操作符
7.逻辑操作符
8.条件操作符
9.逗号表达式
10.下标引用、函数调用和结构成员
下面,让我们逐一探究。
一、算术操作符
主要是以下几种:
加(+) 减(-) 乘(*) 除(/) 取余(%)
- 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
- 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
- % 操作符的两个操作数必须为整数。返回的是整除之后的余数。
通过以下代码的结果感受/操作符对于整数和小数的处理:
int main()
{
int a = 6 / 5;
double b = 6 / 5;
double c = 6.0 / 5;
printf("a = %d\n", a);
printf("b = %f\n", b);
printf("c = %f\n", c);
}
结果:
二、移位操作符
<< 左移操作符
>> 右移操作符
注:移位操作符的操作数只能是整数。
在说移位操作符之前,我们先需要了解一下一个数的原码、反码和补码。
原码:就是一个数字的二进制码。int型因为有4字节,因此在计算机中它的二进制码有32位。其中最高位是一个数字的符号位,正数为0,负数为1。
注意:规定正数的原码反码补码都相同,负数则不同。
负数的反码和补码规则:
反码:符号位不变,其他位按位取反。
补码:反码+1
在计算机内存中所有数字都是以补码存放的。
左移
左移移位实现过程:
把整个二进制码向左移动,左边超出去后抛弃、右边空出来的地方补0。
以10<<1为例:
二进制码:00000000000000000000000000001010(10)
左移后为:00000000000000000000000000010100(20)
右移
移位规则:
首先右移运算分两种:
- 逻辑移位
左边用0填充,右边丢弃 - 算术移位
左边用原该值的符号位填充,右边丢弃。
对于正数,逻辑移位,算术移位的结果都是一样的。
对于负数则有所不同,我们以-1为例,看看在VS2019中负数右移是怎样的。
int main()
{
int a = -1;
int b = a >> 1;
printf("a = %d\n", a);
printf("b = %d\n", b);
}
结果:
我们发现-1右移1位后结果没有变。
二进制码:11111111111111111111111111111111(-1补码)
右移一位:11111111111111111111111111111111
可以发现,右移后左边补1,是算术移位。
注意:对于正数,可以这样理解它的移位:
左移1位相当于乘2,右移1位相当于除2。
三、位操作符
& 按位与
| 按位或
^ 按位异或
注:他们的操作数必须是整数。
下面通过举例来说明是如何进行计算的:
int main()
{
int a = 3;
int b = 5;
int c = a & b;
int d = a | b;
int e = a ^ b;
printf("按位与:%d\n", c);
printf("按位或:%d\n", d);
printf("按位异或:%d\n", e);
}
代码运行结果:
分析:
3的二进制:00000000000000000000000000000011
5的二进制:00000000000000000000000000000101
按位与:按照二进制每一位计算,两个数的相同位做与运算。
3的二进制:00000000000000000000000000000011
5的二进制:00000000000000000000000000000101
3 5按位与:00000000000000000000000000000001(1)
按位或:即两个数的相同位做或运算
3的二进制:00000000000000000000000000000011
5的二进制:00000000000000000000000000000101
3 5按位或:00000000000000000000000000000111(7)
按位异或:即两个数的相同位做异或运算(相同为0,相异为1)
3的二进制:00000000000000000000000000000011
5的二进制:00000000000000000000000000000101
3和5 异或:00000000000000000000000000000110(6)
四、赋值操作符
赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。
+= 例:a += 10 ---- a= a+10
-=
*=
/=
%=
>>=
<<=
&=
|=
^=