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;
//原码00000000000000000000000000001010
//反码00000000000000000000000000001010
//补码00000000000000000000000000001010
int a=-10;
//原码:10000000000000000000000000001010
//补码:11111111111111111111111111110101
//反码:11111111111111111111111111110110
左移操作符
左移操作符的移位规则为:左边抛弃,右边补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;
}
运行结果: