python中的进制转换和原码,反码,补码
计算机文件大小单位
b = bit 位(比特)
B = Byte 字节
1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
1EB = 1024PB
进制分类
二进制:由2个数字组成,有0 和 1 python中标志:0b
八进制:由8个数字组成,有0,1,2,3,4,5,6,7 python中标志:0o
十进制:有10个数字组成,有0,1,2,3,4,5,6,7,8,9 python中标志:无
十六进制:由16个数字组成,包括0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f(大小写字母都可以)是,代表10、11、12、13、14、15)python中的标志:0x
python中的进制转换:
其他进制转换为十进制:int(相应进制)
其他进制转换为二进制:bin(相应进制)
其他进制转换为八进制:oct(相应进制)
其他进制转换为十六进制:hex(相应进制)
二进制 转化成 十进制:
例: 0b10100101
运算:1* 2^0 + 0* 2^1 + 1* 2^2 + 0* 2^3 + 0* 2^4 + 1* 2^5 + 0* 2^6 + 1* 2^7=
1 + 0 + 4 + 0 + 0 + 32 + 0 + 128 = 165
八进制 转化成 十进制:
例: 0o127
运算:7*8^0 + 2*8^1 + 1*8^2 = 7+16+64 = 87
十六进制 转化成 十进制:
例: 0xff
运算:15*16^0 + 15*16^1 = 255
十进制 转化成 二进制:
426 => 0b110101010
运算过程: 用426除以2,得出的结果再去不停地除以2,
直到除完最后的结果小于2停止,
每个阶段得到的余数可以按照从下到上的顺序进行拼接。
十进制 转化成 八进制:
426 => 0o652
运算过程: 用426除以8,得出的结果再去不停地除以8,
直到除完最后的结果小于8停止,
每个阶段得到的余数可以按照从下到上的顺序进行拼接。
十进制 转化成 十六进制:
运算过程: 用426除以16,得出的结果再去不停地除以16,
直到除完最后的结果小于16停止,
每个阶段得到的余数可以从下往上依次拼接。
原码,反码,补码
人们看到的实际数字是在原始代码转换后显示的。
而原码是通过补码得到的。
所有计算机数据都以二进制补码形式存储在底层。
***在基数到基数转换时,需要先取出内存中存储的补码,转成原码进行转换输出***
反码:二进制码0变成1,1变成0称为反码,反码用于原码补码之间的转换。
补码:用于数据存储运算,可实现计算机底层的减法运算,故提出(可表示一个数的正负)。
也就是说默认计算机只会做加法,例:5+(-3) => 5 - 3。
乘法除法是通过左移和右移 << >> 来实现。
正数高位补0,负数高位补1。
正数:
原码 = 反码 = 补码
负数:
反码 = 原码取反(除高位)
补码 = 反码加1
反码 = 补码减1
原码 = 反码取反(除高位)
我们会发现反相前减1和反相后加1的效果是一样的,也就是-2-1 = -(2+1),所以会得出如下规则:
原码 = 补码取反加1
补码 = 原码取反加1
计算机中数字的二进制表示称为数字的机器号。机器号是有符号的,计算机使用数字的最高位来存储符号。正数的符号位为 0,负数的符号位为 1。
比如
正数1在计算机中的存储即为
0 00000000000000000000001
负数1 在计算机中的存储即为
1 00000000000000000000001
一个正数,转换成二进制位就是这个正数的原始码。将负数的绝对值转换成二进制位,然后在高位补1,就是负数的原码。
正数的倒数是原码,负数的倒数等于原码除符号位以外的所有位的倒数。
正数的补码与原码相同,负数的补码是将原码除符号位以外的所有位取反(得到反码),然后最低位加一由 1。
因此,原码、反码和补码在正数情况下一致,在负数情况下不一致。
计算机运算过程实际上是一个补码加法的过程。
比如-2 + 3
-2 的原码为
1 000000000000000000000000010
反码为:
1 111111111111111111111111101
补码为:
1 111111111111111111111111110
3的原码为
0 000000000000000000000000011
反码为:
0 000000000000000000000000011
补码为:
0 000000000000000000000000011
那么二者补码相加结果为
1 111111111111111111111111110
+
0 000000000000000000000000011
=
10 000000000000000000000000001(计算机存储为32位,故前面溢出的1被舍弃,高位为0)
0 000000000000000000000000001
结果为1
再比如-2 + 1
-2 的原码为
1 000000000000000000000000010
反码为:
1 111111111111111111111111101
补码为:
1 111111111111111111111111110
1的原码为
0 000000000000000000000000001
1的反码为:
0 000000000000000000000000001
1的补码为:
0 000000000000000000000000001
二者的补码相加结果为
1 111111111111111111111111110
+
0 000000000000000000000000001
=
1 111111111111111111111111111
将得到的补码转换成原码,最低位减1得到反码,然后除符号位外的所有位都取反得到结果
1 000000000000000000000000001
结果为1
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python如何读取yaml文件12/12
- ♥ python如何调用js中的函数12/20
- ♥ python try语句的执行原理11/08
- ♥ 如何在python中找到带有max()的列表的最大值?09/14
- ♥ python tkinter如何实现绘图计算器接口?12/07
- ♥ 09/08
内容反馈