快速求补码和原码

版权声明:未经本人同意,禁止转载。 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()

猜你喜欢

转载自blog.csdn.net/qq_34022601/article/details/88601297