补码计算速成指南

2025-10-02 22:06:30 拉莫斯世界杯

朴素方法:

对原码按位变反(求到反码),末位加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()