版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
在计算机中,数据以二进制表示,本文以第一个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