精华内容
下载资源
问答
  • 经常遇到对二进制字符串进行原码补码转换,便写个函数记录一下。 def ori2com(ori_str: str): """ 将原码字符串 -> 补码字符串 :param ori_str:原码字符串 :return:补码字符串 """ # 如果符号位为正,则...

    经常遇到对二进制字符串进行原码和补码转换,便写个函数记录一下。

    def ori2com(ori_str: str):
        """
        将原码字符串 -> 补码字符串
        :param ori_str:原码字符串
        :return:补码字符串
        """
        # 如果符号位为正,则原码与补码相同
        if ori_str[0] == '0':
            return ori_str
        elif ori_str[0] == '1':
            value_str = ""
    
            # 数值位按位取反
            for i in range(len(ori_str)):
                if i == '1':
                    continue
                if ori_str[i] == '0':
                    value_str += '1'
                elif ori_str[i] == '1':
                    value_str += '0'
    
            # 数值位加 1
            n = int(value_str, 2) + 1
            com_str = bin(n)[2:]
            if len(com_str) >= len(ori_str):
                # 说明进位到符号位了
                com_str = '0' + com_str[1:]
            else:
                # 0不够,中间填充0
                n = len(ori_str) - len(com_str) - 1
                for i in range(n):
                    com_str = '0' + com_str
                com_str = '1' + com_str
    
            return com_str
    
    
    def com2ori(com_str: str):
        """
        将补码字符串 -> 原码字符串
        :param com_str: 补码字符串
        :return: 原码字符串
        """
        # 补码再求一次补码,就得到原码
        return ori2com(com_str)
    
    
    def ori2dec(bin_str: str):
        """
        将原码字符串 -> 十进制数值
        :param bin_str:原码字符串
        :return:十进制数值
        """
        # 如果为正数
        if bin_str[0] == '0':
            return int(bin_str, 2)
        elif bin_str[0] == '1':
            return -int(bin_str[1:], 2)
    
    
    def com2dec(com_str: str):
        """
        将补码字符串 -> 十进制数值
        :param com_str:补码字符串
        :return:十进制数值
        """
        ori_str = com2ori(com_str)
        return ori2dec(ori_str)
    
    
    if __name__ == '__main__':
        ori_str = '100100100'
        print("二进制原码:" + ori_str)
        print("则,")
        print('补码:' + ori2com(ori_str))
        print('十进制:', ori2dec(ori_str))
    
        print()
    
        com_str = '100100100'
        print("二进制补码:" + com_str)
        print("则,")
        print('原码:' + com2ori(com_str))
        print('十进制:', com2dec(com_str))
    
    输出:
    二进制原码:100100100
    则,
    补码:111011100
    十进制: -36
    
    二进制补码:100100100
    则,
    原码:111011100
    十进制: -220
    

    几个细节

    • 在计算机系统中,数值一律用补码来表示和存储。

    • bin()函数:给一个整数,返回对应正数的原码字符串。如果是负数的话,会在前面添加一个负号。如给字符串bin(-8)返回-0b1000

    • ~:对数值的补码按位取反,包括符号位。你看到的(也就是屏幕上显示的)是十进制数值,如数字5,但计算机中真正存储的是该数值的补码,即0000 0101(最左边一位是符号位)。对该补码进行按位取反得到1111 1010(符号位也会取反)。输出显示时,补码需转换成原码,即得到原码1000 0110,再转换成十进制,即:-6

    • int('101', 2):将二进制原码转化成十进制,默认符号位为正。如int('101', 2)返回结果5

    展开全文
  • python将AD7606B原始补码数据数组转换成原码数组并进行处理为电压值 首先,我们应该先理解一下,补码原码之间是如何转换的, 正数的补码等于原码 负数的补码等于符号位不变,其它位取反,再加1 十制数 原码 ...

    python将AD7606B原始补码数据数组转换成原码数据数组并进行处理为电压值


    首先,我们应该先理解一下,补码跟原码之间是如何转换的,

    • 正数的补码等于原码
    • 负数的补码等于符号位不变,其它位取反,再加1
    十制数原码补码
    +150b 0000 11110b 0000 1111
    -150b 1000 00000b 1111 0001

    也就是说,给一个16位的AD补码值,首先我们可以根据首位是否为1来判断该AD值的正负,

    • 符号位等于0(正数),原码=补码
    • 符号位等于1(负数),补码符号位不变,其余位取反,再整体加1,就是该补码的原码的绝对值,注意此时还要对计算出来的原码加负号,才是最终的AD值

    根据AD7606数据手册
    AD转换函数

    我们可以知道,AD7606B并行数据为16位,即数据范围为0b 1000 0000 0000 0000 ~ 0b 0111 1111 1111 1111,以 ± 5 V \pm 5V ±5V范围为例,

    import numpy as np
    int_number_array = np.array([0xFFFF,0x1FFF,0X0FEE,0x15AC,0x159E,0x3C55,0x0001,0x0010])#含8个数据的数组,代表AD7606B八通道读取的补码数据
    index = np.argwhere(int_number_array & 0b1000000000000000 == 0b1000000000000000)#查找数组中符号位为1(负数),返回索引数组
    int_number_array[index] = -((int_number_array[index] ^ 0b1111111111111111) + 1)#进行补码转换成原码(按位异或相当于按位取反)正数不变,负数进行取反加1,最后加负号
    number_array = int_number_array / 32768 * 5 #将十六进制原码数据转换电压值
    print(number_array)
    

    最后计算结果为

    [-1.52587891e-04 1.24984741e+00 6.22253418e-01 8.46557617e-01 8.44421387e-01 2.35671997e+00 1.52587891e-04 2.44140625e-03]

    分别代表每个通道的某个时刻的电压值,若连续处理一段时间的AD采样值,则可以绘制出8通道的波形图。

    展开全文
  • 目录 进制表示方法 转化进制 原码补码转化 进制表示方法 二进制数表示方法(开头以0b开头,后面接要表达的二进制数) 八进制数表示方法(开头以0o开头,后面接0~7数字) 十六进制数表示方法(开头为0x,后面接16...

    目录

    进制表示方法

    转化进制

    原码与补码转化


    进制表示方法

    二进制数表示方法(开头以0b开头,后面接要表达的二进制数)

    八进制数表示方法(开头以0o开头,后面接0~7数字)

    十六进制数表示方法(开头为0x,后面接16进制数)

    转化进制

    通过调用函数实现
    int(number)转化为十进制
    bin(number)转化为二进制01010
    oct(number)转化为八进制 0o123
    hex(number)转化为十六进制 0x1a2b

    原码与补码转化

    原码

    正数转换为二进制位,二进制位就是这个正数的原码

    负数取绝对值转换为二进制位,二进制位在最高位补1就是这个负数的原码

    反码

    正数的反码跟原码相同,

    负数的反码为在原码的基础上,除符号位外所有位取反,即1变0,0变1

    补码

    正数的补码跟原码相同,

    负数的补码为在原码基础上,除符号位外所有位取反(得到反码),最后在最低位+1

    展开全文
  • python——原码转补码

    千次阅读 2019-07-29 12:18:55
    #原码转化为补码 def true2complement(str_bin): str_new = "" flag = True if str_bin[0] == "0": complement = str_bin else: for i in str_bin[1:]: if i == "0":...
    #原码转化为补码
    def true2complement(str_bin):
        str_new = ""
        flag = True
        if str_bin[0] == "0":
            complement = str_bin
            
        else:
            for i in str_bin[1:]:
                if i == "0":
                    str_new += "1"
                else:
                    str_new += "0"
            str_flash = '1' + str_new    #反码
            i = len(str_flash) -1    
            while(flag):        
                if(str_flash[i] == '1'):           
                    i -= 1        
                elif (str_flash[i] == '0'):            
                    flag = False    
            
            complement = str_flash[0:i] + '1' + (len(str_flash)-i-1)*'0'
        print(complement)
        return complement
    
    展开全文
  • 补码原码

    2019-04-01 22:24:00
    正整数的补码原码相同,负整数的补码是所有位置按位取反,即0变成1,1变成0最后加1. 从补码求源码就是对其补码继续求补码,比如 11111001就是首先第一位符号位是1表示负数,则第一位不变,其他位置按位取反 变成...
  • 快速求补码原码

    千次阅读 多人点赞 2019-03-16 17:10:45
    朴素方法: 对原码按位变反(求到反码),末位加1. 例: 原码: 1000101010 求得反码:0111010101 反码末位加1:0111010110 ...但是遇到比较长的数,这样的求法会很繁琐,有时加1...补码: 0010101000111010 原码: ...
  • python原码反码补码

    2021-07-19 21:42:27
    python原码反码补码1. 计算机计算的逻辑2. 原码反码补码2.1 正数:2.2 负数2.3 计算机中实现1-1 1. 计算机计算的逻辑 计算机只能识别二进制码。 计算机是使用补码进行计算 计算机中是加法运算 计算机存储的二进制位...
  • python】-原码补码

    2020-05-17 18:28:55
    补码:时钟 变与不变:12点之后是几点?13点 对,1点也对。如何找到表盘上的1和逻辑上的13相统一的方法?假如你的表盘像蜗牛的壳一样是螺旋的,从俯视图来看,过了12点之后真的是13点(在1后面的一层),可是从主...
  • 原码、反码和补码计算1. 原码2. 反码3. 补码 1. 原码 原码:(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两...
  • 各进制的转换,见图二    
  • 关于反码和补码的含义和计算什么的,每次记了就忘。。。 这次专门查了下反码和补码的背景和应用。 记录一下。 1、背景 众所周知,计算机语言是使用二进制来表达的。 数字是用n位二进制数来表示的,则数字的运算实质...
  • 可以使用python中的函数来实现 下面符号对应进制数 b:二进制 d:十进制 o:八进制 x:十六进制 十进制转化为二进制调用函数bin print(bin(10)) 十进制转换为八进制调用函数oct print(oct(10)) 十进制转换...
  • 计算机存数据的时候只能存的是数据的补码 内存大小: """ 位(bit) 字节(byte) == 8位 1kb = 1024字节 1Mb = 1024Kb 1G = 1024Mb 1T = 1024G malloc(字节)#要申请多少内存的空间 """ 1.原码 原码 = 符号位 + ...
  • Python 原码反码补码

    2021-05-26 15:46:47
    摘要:https://blog.csdn.net/aic1999/article/details/80102433
  • Python原码、反码、补码相互转换

    千次阅读 2019-04-24 09:31:06
    1、原码、反码、补码基本概念 原码原码是二进制数字的一种简单的表示法。二进制首位为符号位,1代表负,0代表正。 反码:反码可由原码得到。如果是正数,反码与原码相同;如果是负数,反码是其原码(符号位除外...
  • 原码、反码和补码 正数的原码、反码、补码一样 原码 = 符合位(0表示正,1表示负)+ 真值(数字转换成二进制的值) 例如:10 --> 1010(真值) 10 的原码:00000000 00000000 00000000 00001010 负数的原码 -...
  • 反码: 以八位为例 def one(x): return x^0xff#逐位取反如果是16bit就0xffff,32bit就0xffffffff 反码: 以八位为例 def two(x): return (x^0xff)+1#逐位取反后加1如果是16bit就0xffff,32bit就0xffffffff ...
  • Python位运算到原码反码补码

    千次阅读 2018-02-09 23:08:26
    采用书籍Python核心编程(第二版),人民邮电出版社,2008年7月第1版。本书以Python2.5为主,但笔记主要以Python3.6为主。 一、Python位运算操作符 Python支持标准位运算,位运算操作符只能用于整数。操作符如下...
  • 首先,~运算符在python中是按位取反的运算,1的二进制是 0000 0001,按位取反变为 1111 1110,二进制位中的最高位是符号位,1取反之后变成了负数,好,接下来介绍下补码、反码、原码, 计算机中正整数数原码、反码、...
  • python原码、反码、补码

    千次阅读 2018-05-24 20:49:39
    1的原码 0000 0000 0000 0001 正数的原码、反码、补码都是一样的 -1的原码 1000 0000 0000 0001 -1的反码 1111 1111 1111 1110 -1的补码 1111 1111 1111 1111 -1 + 1 = 0000 0000 0000 0000 即 0 -1 +1就是-1...
  • 计算机文件大小单位b = bit 位(比特)B = Byte 字节​1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b1KB = 1024B1MB = 1024KB1GB = 1024MB1TB = 1024GB1...1 python中标志:0b八进制:由8个数字组成,有0,1,2,3,4,...
  • 反码 补码 原码

    2016-06-10 21:12:34
    此外,补码原码相互转换,其运算过程是相同的,不需要额外的硬件电路。 2.正数 正整数的补码是其二进制表示,与原码相同[2] 。 【例1】+9的补码是00001001。(备注:这个+9的补码是用8位2进制来表示的,补码...
  • bin()函数将十进制数转换成二进制数,oct()函数将十进制数转换成八进制数,hex()函数将十进制数转换成十六进制数。 int()函数可以把二进制、八进制和十六进制转换成...转换为二进制数的补码 :bin(2**8+(n)) ...
  • 计算机文件大小单位b = bit 位(比特)B = Byte 字节​1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b1KB = 1024B1MB = 1024KB1GB = 1024MB1TB = 1024GB1PB = ...1 python中标志:0b八进制:由8个数字组成,有0,1,2...
  • 不涉及原码补码理论,仅记录按位取反的实现过程。 计算机中原码补码计算规则 计算机存储8位,左到右为7-0,最高位为符号位,1为负,0为正; 计算机中以补码形式存储 正数的原码补码相同 负数的补码原码按位...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,411
精华内容 964
关键字:

python补码转原码

python 订阅