• 第四届全国中医药院校大学生程序设计竞赛 : 二进制码(Python)


    题目描述

    在计算机中,对于定点数有三种不同的表示方法。在本题中,假定码的长度固定为 8 位,从左往右依次编号为第 1 到 8 位,第 1 位为最高位。
    x 的原码:最高位为符号位,正数符号位为 0,负数符号位为 1,第 2 到 7 位为 x 的二进制表示。
    正负 0 的原码不同。
    x 的反码:原码符号位除外,其他位按位取反,即 1 变 0, 0 变 1。
    x 的补码:正数的补码等于原码,负数的补码等于反码 +1,因此正负 0 的补码相同。
    给定整数 x,请给出它的原码、反码和补码。

    输入

    第一行包含一个正整数 ,表示测试数据的组数。
    每组测试数据包含一行,首先是一个符号 “+” 或 “-”,表示 x 的正负,然后是一个非负整数
    ,表示 x 的绝对值为 y。

    输出

    对于每组数据,输出三行,第一行为原码,第二行为反码,第三行为补码。

    样例输入 Copy

    4
    +0
    +1
    -0
    -3

    样例输出 Copy

    00000000
    01111111
    00000000
    00000001
    01111110
    00000001
    10000000
    11111111
    00000000
    10000011
    11111100
    11111101

    代码

    def jingzhi(s):#不满足八位就补0
        if len(s) < 7:
            return '0' * (7 - len(s)) + s
        return s
    def fanma(s, p):#求反码
        st = ''
        for t in s:
            st += str(p[t])
        return st
    def buma(s):#求补码
        st = list(s[1:7] + str(int(int(s[7]) + 1)))#满2就进1
        if st[6] == '2':
            for i in range(len(st) - 1, 0, -1):
                if st[i] == '2':
                    st[i - 1] = str(int(st[i - 1]) + 1)
                    st[i] = '0'
        if st[0]=='2':
           st[0] = '0'
        return st
    p = dict()#‘+’为正用0,‘-’为负用1
    p['+'] = 0
    p['-'] = 1
    p['0'] = 1
    p['1'] = 0
    t = int(input())
    for i in range(t):
        m = input()
        shuzi = int(m[1:])#数字
        flag = int(p[m[0]])#符号位
        ji = jingzhi(str(bin(shuzi)[2:]))#bin用于求2进制
        shuzi1 = str(flag) + ji  # 原码
        print(shuzi1)
        # 反码
        fa = str(flag) + fanma(ji, p)
        print(fa)
        if fa=='11111111' or fa=='01111111':#+0和-0的补码比较特殊,单独处理
           print('00000000')
        else:
            # 正数补码
            if flag == 0:
                print(shuzi1)
            else:#负数补码
                b = buma(fa)
                st = ''
                for t in b:
                    st += t
                print('1' + st)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    测试

    在这里插入图片描述
    用于学习记录,大佬有更好的解法,欢迎指教,谢谢。

  • 相关阅读:
    java基于springboot在线音乐分享网站的ssm社交网站
    实现list的简单模型
    操作系统——文件管理の选择题整理
    yolov5剪枝实战2:网络剪枝原理介绍
    C和指针 第14章 预处理器 14.6 总结
    [Machine Learning][Part 6]Cost Function代价函数和梯度正则化
    FPGA实现电机霍尔编码器模块
    RestFul,会话技术,Fiddler
    @RequiredArgsConstructor介绍
    【R语言基础操作】
  • 原文地址:https://blog.csdn.net/weixin_57662182/article/details/127796737