一、算术操作符
算术操作符 | 描述 |
---|---|
+ | 把两个操作数相加 |
- | 第一个操作数减去第二个操作数 |
* | 把两个操作数相乘 |
/ | 分子除以分母 |
% | 取模运算符,整除后的余数 |
注意:1.除号的两端都是整数的时候执行的是整数的除法,两端只要有一个浮点数,就执行浮点数 的除法;
2.%取模两端必须为整数 。
二、移位操作符
1.左移位操作符<<
规则:左边抛弃,右边补0
由于在计算机中存储的数为二进制的补码,正数的原码、反码、补码均一致,负数的补码等于反码加一
则7的原码、补码、反码为:00000000000000000000000000000111
经过左移一位之后的结果为:000000000000000000000000000001110
即为十进制数14
若操作数为负数
-7的原码为:10000000000000000000000000000111
反码为:11111111111111111111111111111000
补码为:11111111111111111111111111111001
左移一位后的结果为:11111111111111111111111111110010
原码为:10000000000000000000000000001110,即十进制数-14
2.右移操作符>>
右移操作符分为两种①:算术移位:右边抛弃,左边补原值符号位
②:逻辑移位:右边抛弃,左边补0
一般编译器均为算术移位
-7的补码为:11111111111111111111111111111001
右移一位后的结果为:11111111111111111111111111111100
原码为:10000000000000000000000000000100,即十进制数-4
7的原码、补码、反码为:00000000000000000000000000000111
右移一位后的结果为: 00000000000000000000000000000011,即十进制数3
三、位操作符
位操作符主要分为三类:
&:按(二进制)位与
|:按(二进制)位或
^:按(二进制)位异或
注意❗❗❗:操作数均为整数
原理:通过存储在计算机中的二进制数进行按位操作,若操作数为正数,则直接输出其对应的数值;若操作数为负数,则求得其对应的原码所代表的数值后输出。
int main()
{
int a = 3;
//a的补码 00000000000000000000000000000011
int b = -5;
//b的原码 10000000000000000000000000000101
//b的反码 11111111111111111111111111111010
//b的补码 11111111111111111111111111111011
int c = a & b;
printf("c = %d\n",c);
//a和b的补码按位与结果:00000000000000000000000000000011 即十进制数3
int d = a | b;
printf("d = %d\n", d);
//a和b的补码按位或结果:11111111111111111111111111111011
//反码为:11111111111111111111111111111010
//原码为:10000000000000000000000000000101 即十进制数 -5
int e = a ^ b;
printf("e = %d\n", e);
//a和b的补码按位异或结果:11111111111111111111111111111000
//反码为:11111111111111111111111111110111
//原码为:10000000000000000000000000001000 即十进制数 -8
return 0;
}
四、赋值操作符
运算符 | 描述 |
---|---|
= | 赋值运算符,把右边操作数的值赋给左边操作数 |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 |
<<= | 左移且赋值运算符 |
>>= | 右移且赋值运算符 |
&= | 按位与且赋值运算符 |
^= | 按位异或且赋值运算符 |
|= | 按位或且赋值运算符 |