张俊玲
19021210858
转载自:https://blog.csdn.net/u011956367/article/details/102758066
【嵌牛导读】在Python中如何实现整数的原码、反码、补码和移码。
【嵌牛鼻子】正数 负数 原码 反码 补码 移码
【嵌牛提问】正数和负数分别取原码、反码、补码和移码的规则是什么?
【嵌牛正文】
在计算机中,数据以二进制表示,本文以第一个0/1表示符号位,以bin(x)表示x绝对值的二进制串,以rev(x)表示x绝对值的二进制串按位取反的二进制串。
例如:
bin(2)=10
rev(2)=01
原码
正数的原码
0,bin(x)
负数的原码
1,bin(x)
反码
正数的反码
0,bin(x)
负数的反码
1,rev(x)
补码
正数的补码
0,bin(x)
负数的补码
1,rev(x)+1
移码
正数的补码
1,bin(x)
负数的补码
0,rev(x)+1
规则
0的原码反码补码相等,均为0,0
正数的原码反码补码相等
负数的反码等于原码的数值按位取反(符号位不变)
负数的补码等于反码加1
移码等于补码的符号位取反
python实现
flag=0
_s=''
def getbin(s):
_s=bin(abs(s))
_s=_s.replace('0b','')
return _s
def rev(s):
s=s.replace('1','2')
s=s.replace('0','1')
s=s.replace('2','0')
return s
def y(s):
print('原码是:%d,%s\t'%(flag,_s))
def f(s):
global _s
if flag==0:
print('反码是:%d,%s\t'%(flag,_s))
return
_s=rev(_s)
print('反码是:%d,%s\t'%(flag,_s))
return
def by(s):
global _s
_s=int(_s,2)+1
_s=getbin(_s)
print('补码是:%d,%s\t'%(flag,_s))
print('移码是:%d,%s\t'%((flag+1)%2,_s))
def out(s):
y(s)
f(s)
by(s)
while True:
try:
s=int(input('请输入一个十进制整数:\n'))
if s>=0:
flag=0
else:
flag=1
_s=getbin(s)
out(s)
print()
except IOError:
break
请输入一个十进制整数:
-2
原码是:1,10
反码是:1,01
补码是:1,10
移码是:0,10
请输入一个十进制整数:
2
原码是:0,10
反码是:0,10
补码是:0,11
移码是:1,11