进制转换
进制之间的转换
二进制,计算机中处理数据,存储的方式,逢2进1,由0,1构成
- 其他进制到十进制的转换
- 规律:系数*进制数(原进制)^n次方之和
十进制到十进制
十进制:12345 十进制:12345
12345 = 10000 + 2000 + 300 + 40 + 5
= 110^4 + 2103 + 310^2 + 410^1 + 510^0
= 10000 + 2000 + 300 + 40 + 5
= 12345
规律:系数*进制数^n次方之和
二进制: 01010100 十进制:
01010100 = 12^6 + 12^4 + 1*2^2
= 64 + 16 + 4
= 84
-
十进制到其他进制的转换
-
除基(目标进制)取余,直到商为0,余数反转
十进制:84 二进制:01010100
84/2 = 42 --- 0
42/2 = 21 --- 0
21/2 = 10 --- 1
10/2 = 5 --- 0
5/2 = 2 --- 1
2/2 = 1 --- 0
1/2 = 0 --- 1 -
其他进制之间的转换
-
利用十进制作为桥梁进行转换
-
二进制转八进制,十六进制 拆分组合法 01010100
-
2进制转8进制 :从右向左,每三位一组,高位不够,用0补齐,算每一组的十进制的值,组合 124
-
2进制转16进制 :从右向左,每四位一组,高位不够,用0补齐,算每一组的十进制的值,组合 54
-
针对二进制和十进制之间的转换,人们提供了一个快速转换的方法,8421码
原码,反码,补码 (二进制形式)
由两个部分构成:符号位(最高位),数值位
=======================
- 原码:正数的原码与其二进制相同,最高位为0,负数的原码最高位为1
3的原码:
1、3的二进制:11
2、3的原码:00000011
-3的原码:
1、3的二进制:11
2、-3的原码:10000011
- 反码:正数的反码与原码一致,负数的反码,符号位不变,数值位按位取反
3的反码:
1、3的二进制:11
2、3的原码:00000011
3、3的反码:00000011
-3的原码:
1、3的二进制:11
2、-3的原码:10000011
3、-3的反码:11111100
- 补码:正数的补码与原码一致,负数的补码,由反码的末位(最右边的)+1
3的反码:
1、3的二进制:11
2、3的原码:00000011
3、3的反码:00000011
4、3的补码:00000011
-3的原码:
1、3的二进制:11
2、-3的原码:10000011
3、-3的反码:11111100
4、-3的补码:11111101
-3+1 = -2
我们看到的结果是底层补码计算后,转成原码,数值位再转10进制,拼接符号位的结果
-3的补码:11111101
1的补码: 00000001
补码: 11111110
已知补码求原码:
符号位 数值位
补码: 1 1111110
反码: 1 1111101
原码: 1 0000010
===> -2
- & 有0则0
python
a1 = 3
b1 = 4
'''
a1的二进制表现形式:
'''
print(a1 & b1) # 0
3的补码:00000011
4的补码:00000100
00000000
=========================
- | 有1则1
a1 = 3
b1 = 4
'''
a1的二进制表现形式:
'''
print(a1 | b1) # 7
3的补码:00000011
4的补码:00000100
----------------
00000111
=======================
- ^ 相同则0 ,不同则1
python
a1 = 3
b1 = 4
'''
a1的二进制表现形式:
'''
print(a1 ^ b1) # 7
3的补码:00000011
4的补码:00000100
----------------
00000111
=======================
- ~ 针对一个值来说,每一位上进行取反,0变成1,1变成0
a1 = 3
'''
a1的二进制表现形式:
'''
print(~a1) # -4
3的补 码:00000011
----------------
补码: 11111100
反码: 11111011
原码: 10000100
---------------------
-4
=======================
- << 补码整体向左移动若干位,右边空出的位置使用0补齐 左移n位实际上就是*2的n次方
a1 = 3
print(a1<<2) # 3*4=12 --> 3*2^2 = 12
3的补码:
00000011
(00)00001100
---------------
b1 = -4
print(b1<<2) # -4*4 = -16 --> -4*2^2= = -16
-4的原码:10000100
-4的反码:11111011
-4的补码:11111100
11111100
(11)11110000
-------------------
补码:11110000
反码:11101111
原码:10010000
-------------------
-16
c1 = 8
print(c1<<2) # 32
=======================
- 右移>> 左边空出的位置,原本最高位是0,就用0补齐,原本最高位是1,就用1补齐 左移n位实际上就是//2的n次方
python
print(64 >> 2) # 16
64的补码:01000000
01000000
00010000(00)
---------------------
:16
print(-64 >> 2) # -16
-64的原码:11000000
-64的反码:10111111
-64的补码:11000000
-----------------------
11000000
11110000(00)
-----------------------
补码:11110000
反码:11101111
原码:10010000
-----------------------
:-16