目录
1.操作符的分类
• 算术操作符: + 、- 、* 、/ 、%
• 移位操作符: << 、>>
• 位操作符: & 、| 、 ^ 、 `
• 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=
• 单目操作符: !、++、--、&、*、+、-、~ 、sizeof、(类型)
• 关系操作符: > 、>= 、< 、<= 、 == 、 !=
• 逻辑操作符: && 、||
• 条件操作符: ? :
• 逗号表达式: ,
• 下标引用: [ ]
• 函数调用: ( )
• 结构成员访问: . 、->
2.二进制和进制转换
2.1 二进制的概念
2进制、8进制、10进制、16进制是我们生活中常见的讲法,那它们到底是什么意思呢?
其实2进制、8进制、10进制、16进制是数值的不同表示形式。
比如:数值15的各种进制的表示形式是:
2进制 :1111
8进制 :17
10进制 :15
15进制 :F
在这里我们重点介绍二进制:
介绍二进制可以和十进制进行对比学习:
2.2 2进制与10进制相互转换
其实10进制的123表示的值是一百二十三,那这是为什么呢?
其实10进制的每一位是权重的,如图:
2进制和10进制是类似的,只不过2进制的每一位的权重和10进制的不同,如图:
由此可以使一个2进制的数转换成10进制的数
如何将10进制的数转换成2进制的数呢?让我们一起来看看:
由图可知:10进制的125转换的2进制:1111101
2.3 2进制转8进制和16进制
8进制的数字每⼀位是0~7的,0~7的数字,各自写成2进制,最多有3个2进制位就足够了,比如7的⼆进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀个8进制位,剩余不够3个2进制位的直接换算。
16进制的数字每⼀位是0~9,a~f的,0~9,a~f的数字,各自写成2进制,最多有4个2进制位就足够了,比如f的二进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算。
注意:
2进制的01101011,换成8进制:0153,0开头的数字,会被当做8进制;
2进制的01101011,换成16进制:0x6b,16进制表示的时候前面加0x。
3.原码、反码、补码
整数的2进制表示方法有三种,即:原码,反码,补码。
有符号的整数的三种表示方式均有符号位和数值位两部分,在二进制序列中,最高位的1位是被当做符号位,剩余的都是数值位。整形(整数)占四个字节(32bit)。
符号位都是用“0”表示“正”,用“1”表示“负”。
3.1正整数
正整数的原码,反码,补码都相同。
整数:10
原码:00000000000000000000000000001010
反码:00000000000000000000000000001010
补码:00000000000000000000000000001010
3.2负整数
负整数的三种表示方法各不相同
原码:直接将数值按照正负数形式转换成二进制得到的就是原码
反码:原码的符号位不变,其他位依次按位取反得到反码
补码:反码+1得到补码
整数:-10
原码:00000000000000000000000000001010
反码:01111111111111111111111111110101
补码:01111111111111111111111111110110
3.3三种表示方式的转换 (负整数)
对于整形来说:数据存放内存中其实存放的是补码。
4.移位操作符
移位操作符的操作数只能是整数。
4.1左移操作符 (<<)
移位规则:左移抛弃,右边补0。(如图)
代码展示:
#include <stdio.h>
int main()
{
int num = 10;
int n = num<<1;
printf("n= %d\n", n);
printf("num= %d\n", num);
return 0;
}
4.2右移操作符 (>>)
移位规则:
1.逻辑右移:左边用0填充,右边丢弃。
2.算术右移:左边用原符号位填充,右边丢弃。
对于移位运算符,不能移动负数位,这是标准未定义的。
例如:
int num = 10; num>>-1;//error
5.位操作符:&、|、^、~
位操作符有:(操作数必须是整数)
& //按位与
| //按位或
^ //按位异或
~ // 按位取反
5.1 & 按位与
两个操作数都是1,才为1。如图:
用代码验证:
5.2 | 按位或
两个操作数都是0,才为0。如图:
用代码验证:
5.3 ^ 按位异或
操作数相同为0,两个操作数不同为1。如图:
用代码验证:
利用异或符可以进行交换数据的操作(如图):
用代码验证:
5.4 ~ 按位取反
对操作数依此取反即:0取反得1,1取反得。 如图:
用代码验证:
第一小节到此结束
如有用给个免费的点赞和关注,一起学习一起成长。