十二、进制
十二、进制
(1)进制
-
基本介绍
对于整数,有如下表示方式
- 2进制:0,1,满2进1.以0b或0B开头。
- 8进制:0-7,满8进1.以数字0o或者0O开头表示。
- 10进制:0-9,满10进1。
- 16进制:0-9及A(10)-F(15),满16进1.以0x或0X开头表示。此处的A-F不区分大小写
# 2进制 print(0b111) # 7 print(0B111) # 7 # 8进制 print(0o111) # 73 print(0O111) # 73 # 10进制 print(111) # 111 # 16进制 print(0x111) # 273 print(0X111) # 273 -
进制的图示
十进制 (Decimal) 二进制 (Binary) 八进制 (Octal) 十六进制 (Hexadecimal) 0 0 0 0 1 1 1 1 2 10 2 2 3 11 3 3 4 100 4 4 5 101 5 5 6 110 6 6 7 111 7 7 8 1000 10 8 9 1001 11 9 10 1010 12 A 11 1011 13 B 12 1100 14 C 13 1101 15 D 14 1110 16 E 15 1111 17 F 16 10000 20 10 32 100000 40 20 64 1000000 100 40 128 10000000 200 80 255 11111111 377 FF
(2)进制的转换
-
进制转换的介绍
-
其它进制转十进制
-
二进制转换成十进制
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
案例:请将 0b1011转成十进制的数![image-20260701172758531]()
-
八进制转换成十进制
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。
案例:请将0o234转成十进制的数![image-20260701173010055]()
-
十六进制转换成十进制
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
案例:请将0x23A转成十进制的数![image-20260701173109909]()
-
-
十进制转其它进制
-
十进制转换成二进制
规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
案例:请将34转成二进制 = 0b100010
![image-20260701173947583]()
-
十进制转换成八进制
规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。
案例:请将131转成八进制=0o203
![image-20260701174237983]()
-
十进制转换成十六进制
规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。
案例:请将237转成十六进制= 0xED
![image-20260701174355572]()
-
-
二进制转换成八进制、十六进制
-
二进制转换成八进制
规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。
案例:请将 ob11010101转成八进制
![image-20260701175642534]()
-
二进制转换成十六进制
规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可,
案例:请将 ob11010101转成十六进制
![image-20260701175808894]()
-
-
八进制、十六进制转成二进制
-
八进制转换成二进制
规则:将八进制数每1位,转成对应的一个3位的二进制数即可。
案例:请将0o237转成二进制
![image-20260701180206266]()
-
十六进制转换成二进制
规则:将十六进制数每1位,转成对应的4位的一个二进制数即可。
案例:请将0x23B转成二进制
![image-20260701180349304]()
-
(3)二进制在运算中的说明
- 基本介绍
- 二进制是逢2进位的进位制,0、1是基本数字符号
- 现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。
- 计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是"逢2进1”,数字1在不同的位上代表不同的值。
(4)原码、反码、补码(重点难点)
-
二进制的最高位是符号位:0表示正数,1表示负数
![image-20260701185436862]()
-
正数的原码,反码,补码都一样(三码合一)
![image-20260701185626809]()
-
负数的反码=它的原码符号位不变,其他位取反(0->1 1->0)
![image-20260701185756047]()
-
负数的补码=它的反码+1,负数的反码= 负数的补码-1
!
![image-20260701185833779]()
-
0的反码,补码都是0
-
在计算机运算的时候,都是以补码的方式来运算的
![image-20260701190357645]()
![image-20260701190743356]()
-
当我们看运算结果的时候,要看他的原码
(5)位运算符
| 运算符 | 名称 | 描述 | 示例(a=60, b=13) |
|---|---|---|---|
& |
按位与 (AND) | 两个操作数对应位都为 1 时结果为 1 | a & b = 12(0000 1100) |
| |
按位或 (OR) | 两个操作数对应位有一个为 1 时结果为 1 | a | b = 61(0011 1101) |
^ |
按位异或 (XOR) | 两个操作数对应位相同为 0,不同为 1 | a ^ b = 49(0011 0001) |
~ |
按位取反 (NOT) | 将操作数的每一位取反(0 变 1,1 变 0) | ~a = -61(补码表示) |
<< |
左移 (Left Shift) | 将操作数的二进制位向左移动指定位数,右侧补 0 | a << 2 = 240(1111 0000) |
>> |
右移 (Right Shift) | 将操作数的二进制位向右移动指定位数,左侧补符号位(算术右移) | a >> 2 = 15(0000 1111) |
>>> |
无符号右移 (Unsigned Right Shift) | 将操作数的二进制位向右移动指定位数,左侧补 0(仅 Java/JavaScript 等) | a >>> 2 = 15(同 >>,因 a 为正数) |
-
~按位取反
-
~规则:对数据的每个二进制位取反,即把1变为0,把0变为1
-
分析 -2、2的结果是多少?
![image-20260701191958928]()
-
-
&按位与
-
&规则:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
-
分析2&3的结果是多少?
![image-20260701192115922]()
-
-
^按位异或
-
^规则:当两个对应的二进位相异时,结果为日
-
分析 2^-3的结果是多少?
![image-20260701192215503]()
-
-
|按位或
-
|规则:只要对应的二个二进位有一个为1时,结果位就为1
-
分析2|3的结果是多少?
![image-20260701192306069]()
-
-
<<左移
-
<<规则:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,符号位不变,高位丢弃,低位补0
-
分析 5<<1、-5<<1的结果是多少?
image-20260701192643650
x<<n = x*(2^n)
-
-
>>右移
-
>>规则:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数,低位溢出,符号位不变并用符号位补溢出的高位
-
分析5>>1、-5>>1 的结果是多少?
![image-20260701192937614]()
x>>n = x//(2^n)
-






















浙公网安备 33010602011771号