Day3-Python学习中关于进制、不同进制之间的转换以及反码、原码和补码

6 篇文章 0 订阅
1 篇文章 0 订阅

1. 进制的种类

数字在计算机中表现的方式常见的有四种:十进制、二进制、八进制、十六进制
1.1 十进制
1)基数:0123456789
2)进位:逢101
3)位权:10的n次方 (n从低位到高位从0开始依次增加)
1231 = 1*10^3 + 2*10^2 + 3*10^1 + 1*10^0
4)程序中的表示方式:直接写
123
100
1.2 二进制
1)基数:01

2)进位:逢21
"""
11011 + 10111 = 110010
1011 + 111010 = 1000101
"""

3)位权:2的n次方 (n从低位到高位从0开始依次增加)
101011 = 2^5 + 2^3 + + 2^1 + 2^0 = 32 + 8 + 2 + 1 = 43

4)程序中的表示方式:二进制数前加 0b或者0B
0b101       # 正确写法
0B1010011   # 正确写法
0b102       # 错误写法
1.3 八进制
1)基数:01234567

2)进位:逢81
"""
76 + 45 = 143
"""

3)位权:8的n次方 (n从低位到高位从0开始依次增加)
123 = 1*8^2 + 2*8^1 + 3*8^0 = 64 + 16 + 3 = 83

4)程序中的表示方式:八进制数前加 0o或者0O
0o10
0O27
1.4 十六进制
1)基数:0123456789,a/A,b/B, c/C, d/D, e/E, f/F
2)进位:逢161
"""
9 + 6 = F
7 + 9 = 10
"""
3)位权:16的n次方 (n从低位到高位从0开始依次增加)
123 = 16^2 + 2*16^1 + 3*16^0 == 256 + 32 + 3 = 291
4)程序中的表示方式:十六进制数前加 0x或者0X
0x9afdab
0x8AabF1

注意:十进制数能做的事情其他的进制数都可以做
print(291 + 1)
print(0x123 + 1)

2. 不同进制之间的相互转换

2.1 其他进制转十进制
# 手动转换: 每一位上的数乘以位权再求和
"""
0b1011 ->  2^0 + 2^1 + 2^3 = 1 + 2 + 8 = 11
0o12  ->  2*8^0 + 1*8^1 = 10
0xaf -> 15*16^0 + 10*16^1 = 175
"""
# 使用代码:直接用print函数打印
print(0b1011)     # 11
print(0o12)       # 10
print(0xaf)       # 175
2.2 十进制转其他进制
# 手动转换:辗转取余法
"""
100 -> 0b1100100
100 -> 0o144
100 -> 0x64
"""
print(0b1100100, 0o144, 0x64)  # 100
2.3 八进制、十六进制与二进制之间的相互转换:
八进制转二进制: 将18进制数转换成3位的二进制
十六进制转二进制: 将116进制数转换成4位的二进制
0o67 -> 0b110 111
0o624 -> 0b110 010 100
0xaf  -> 0b1010 1111
0xf21 -> 0b1111 0010 0001
0xa8e4 -> 0b1010 1000 1110 0100

二进制转八进制:将3位的2进制数转换成1位的8进制
二进制转十六进制:将4位的2进制数转换成1位的16进制
0b011 010 111 011  -> 0o3273
0b0110 1011 1011 -> 0x6bb
2.4. 代码转换
# 1)bin(数字) -> 将其他数字转换成二进制
# 2) oct(数字) -> 将其他数字转换成八进制
# 3) hex(数字) -> 将其他数字转换成16进制
print(bin(0o67))
print(hex(100))

3.原码、反码和补码

计算机存储数据的时候存的是数字的补码,正数的原码、反码和补码一样

3.1 原码

原码 = 符号位+真值
符号位:最高位表示符号位(0表示正,1表示负)
真值:数字的绝对值的二进制
10的原码:00001010
-256的原码:10000001 00000000
56的原码:00111000
`print(0b10101011)`

3.2 负数的反码 - 原码符号位不变其余位取反

-10的反码:11110101
-3的反码:10000011() -> 11111100()
-2的反码:10000010() -> 11111101()

3.3 负数的补码 - 反码加1

计算机在存储和操作数据的时候使用的是原码,查看结果的时候用原码
-2的补码:11111110
-3的补码:11111101
"""
计算机在对负数进行加法运算的时候结果不对,需要通过补码进行运算(计算机没有减法器只有加法器)
3 - 2 = 1
00000011(原) + 10000010(原) = 10000101(原码) -> -5(错)
00000011(补) + 11111110(补) = 000000001(补) -> 000000001(原) -> 1(对)
"""

3.4内存大小

(bit)
字节(byte): 1字节 == 8位
1kb = 1024字节
1Mb = 1024kb
1G = 1024Mb
1T = 1024G

程序员编程能操作的内存的最小单位是字节:malloc(字节)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值