C语言——操作符详解(上)
操作符的分类
C语言中的操作符主要分为算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构成员。我将分成三篇文章为大家详细介绍以上所有操作符。
操作符详解:
算术操作符
算术操作符主要有以下五种 + - * / %。下面为部分代码示例 ① +
#include<stdio.h>
int main()
{
int a = 20;
int b = 10;
printf("%d\n", a + b);
return 0;
}
运行结果:  ② -
#include<stdio.h>
int main()
{
int a = 20;
int b = 10;
printf("%d\n", a - b);
return 0;
}
运行结果:  ③ *
#include<stdio.h>
int main()
{
int a = 20;
int b = 10;
printf("%d\n", a * b);
return 0;
}
运行结果:  ④ %
#include<stdio.h>
int main()
{
int a = 20;
int b = 10;
printf("%d\n", a % b);
return 0;
}
运行结果:  ⑤ /
#include<stdio.h>
int main()
{
int a = 20;
int b = 10;
printf("%d\n", a / b);
return 0;
}
运行结果:  算术操作符的注意事项:
- 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
- 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。如:
#include<stdio.h>
int main()
{
int a = 20;
float b = 3.0;
printf("%.2f\n", a / b);
return 0;
}
运行结果:  3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。
移位操作符
移位操作符主要包含有:<<( 左移操作符) >> (右移操作符) 注意:移位操作符的主要对象为整数类型 在学习移位操作符之前,我们需要先了解进制的表达形式,整数的2进制表达形式有3种,分别为原码、反码、补码。内存中存储的起始是:补码的二进制。所以在参与移位操作的时候,移动后都是补码。 按照一个数的正负,直接写出它的二进制表示形式得到的就是原码。 正数 正数的原码、反码、补码是相同的 负数 负数的反码和补码需要通过计算得到结果 ①负数的反码是原码的符号位不变,其他位按位取反,就是反码 ②负数的补码是反码+1 ③0表示为正,1表示为负
由于整型为4个字节,占32个bit。 eg:
int a=10;
int a=-10;
左移操作符
左移操作符的移位规则为:左边抛弃,右边补0。
#include <stdio.h>
int main()
{
int a = 10;
int b = a << 1;
printf("%d\n", b);
return 0;
}
详解过程:  运行结果:  对于负数来说‘
#include <stdio.h>
int main()
{
int a = -10;
int b = a << 1;
printf("%d\n", b);
return 0;
}
详解过程:  运行结果: 
右移操作符
右移操作符分为两种,分别是: ①、逻辑移位:左边用0填充,右边丢弃 ②、算术移位:左边用原该值的符号位填充,右边丢弃
#include <stdio.h>
int main()
{
int a = -10;
int b = a >>1;
printf("%d\n", b);
return 0;
}
运行结果: 
位操作符
位操作符分别有:
&
|
^
他们也是针对二进制位进行计算的 注:他们的操作数必须是整数。 ①、 & 规则为:对应的二进制位有0,则为0,两个同时为1,才为1
#include<stdio.h>
int main()
{
int a = 2;
int b = -1;
printf("%d\n", a & b);
return 0;
}
运行结果:  ②、| 规则为:对应的二进制位有1则为1,两个同时为0则为0
#include<stdio.h>
int main()
{
int a = 3;
int b = -5;
printf("%d\n", a | b);
return 0;
}
运行结果: 
③、^ 规则为:按2进制位异或,对应的二进制位:相同为0,相异为1。
#include<stdio.h>
int main()
{
int a = 3;
int b = -5;
printf("%d\n", a ^ b);
return 0;
}
运行结果: 
|