版权声明:未经本人同意,禁止转载。 https://blog.csdn.net/qq_34022601/article/details/88601297
朴素方法:
对原码按位变反(求到反码),末位加1.
例:
原码: 1000101010
求得反码: 0111010101
反码末位加1:0111010110
但是遇到比较长的数,这样的求法会很繁琐,有时加1后甚至会有进位。
简单方法:
对原码从右往左数,知道遇到第一个数字1,1及1右边的数不变,1左边的数字按位求反。
补码: 0010101000111010
原码: 1101010111000110
仔细看看原码和补码最右边的第一个1的左边是不是都是相反的。
同理,这个方法也可以由补码求原码。
感觉自己动手试试!!
附上python验证代码:
#求反码
def Getadverse(trueform):
ad=list(trueform)
a=""
for i in range(len(ad)):
if ad[i]=='0':
ad[i]='1'
else:
ad[i]='0'
a="".join(ad)
return a
#由原码求反码
def Convert(form):
ad=list(form)
a=""
l=len(ad)-1
flag=False
for i in range(len(ad)):
if ad[l-i]=='1' and flag==False:
flag=True
continue
if flag==True:
if ad[l-i]=='0':
ad[l-i]='1'
else:
ad[l-i]='0'
a="".join(ad)
return a
def main():
truform=input("put string: ")
print('反码:',Getadverse(truform))
print('补码:',Convert(truform))
print('求得原码:',Convert(Convert(truform)))
print('真正原码:',truform)
main()