python有 符号吗_python 解析有符号的二进制

有符号二进制数到十进制的转换用下面的算法计算一个有符号二进制整数的十进制数值:如果最高位是 1,则该数是补码。再次对其求补,得到其正数值。然后把这个数值看作是一个无符号二进制整数,并求它的十进制数值。

如果最高位是 0,就将其视为无符号二进制整数,并转换为十进制数。

例如,有符号二进制数 1111 0000 的最高有效位是 1,这意味着它是一个负数,首先要求它的补码,然后再将结果转换为十进制。

过程如下所示:

初始值11110000第一步:按位取反00001111第二步:将上一步得到的结果加 100001111

+ 1第三步:生成补码00010000第四步:转换为十进制16

由于初始值(1111 0000)是负数,因此其十进制数值为 -16。

源代码

# encoding: utf-8

"""

@version: 1.0

@author: Jarrett

@file: bin2dec

@time: 2020/5/18 14:24

"""

class Bin2Dec():

def __init__(self):

pass

def bin2dec(self, a):

a_reverse = self.reverse(a) # 取反

a_add_1 = self.add_1(a_reverse) # 二进制加1

a_int = -int(a_add_1, 2)

return a_int

def bin2dec_auto(self, a):

if a[0] == '1': # 如果首位是1,复数转换

a_output = self.bin2dec(a)

else:

a_output = int(a, 2)

return a_output

def add_1(self, binary_inpute): # 二进制编码加1

_, out = bin(int(binary_inpute, 2) + 1).split("b")

return out

def reverse(self, binary_inpute): # 取反操作

binary_out = list(binary_inpute)

for epoch, i in enumerate(binary_out):

if i == "0":

binary_out[epoch] = "1"

else:

binary_out[epoch] = "0"

return "".join(binary_out)

if __name__ == '__main__':

bin2dec = Bin2Dec()

a_origin = "000000000011010"

a = bin2dec.bin2dec(a_origin)

print(a) # -32742 这是将上面的字符串强行转换

b_rev = bin2dec.reverse(a_origin)

print(b_rev) # 111111111100101

b = bin2dec.bin2dec(b_rev)

print(b) # -27

c = bin2dec.bin2dec_auto(a_origin)

print(c) # 26

d = bin2dec.bin2dec_auto(b_rev)

print(d) # -27

使用方法

bin2dec = Bin2Dec() a = '11110000' a_int = bin2dec.bin2dec_auto(a)

out: a = -16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值