Problem 3165 --二进制补码

3165: 二进制补码

"
Time Limit $1$ 秒/Second(s) Memory Limit $512$ 兆字节/Megabyte(s)
提交总数 $179$ 正确数量 $125$
裁判形式 标准裁判/Standard Judge 我的状态 尚未尝试
难度 分类标签 字符串 模拟

计算机补码:

(1)输入是一个32位二进制整数每一位是0/1

(2)如果一个数第一位是0表示是非负数,只要把这个转化为十进制就可以了

(3)否则就是对应的绝对值的反码加1,

请根据一个数的补码计算出这个数的值

比如 

11111111 11111111 11111111 11111110(10) =-2(10)

00000000 00000000 00000000 00000110  (10)=6(10)


多组输入,每行32个0或者1表示的字符串,
对于每一组输入,输出对应的有符号的十进制数
11111111111111111111111111111110
-2

原码求补码

编辑
求给定数值的补码分以下两种情况:
正数
正整数的补码是其二进制表示,与原码相同 [3]
例:+9的补码是00001001。(备注:这个+9的补码是用8位2进制来表示的,补码表示方式很多,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。每一种补码表示形式都只能表示有限的数字。)

负数

求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1 [4]  。
同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。以下都使用8位2进制来表示。
例:求-5的补码。
-5对应正数5(00000101)→所有位取反(11111010)→加1(11111011)
所以-5的补码是11111011。

0的补码

数0的补码表示是唯一 [3]
[+0]补=[+0]反=[+0]原=00000000
[ -0]补=11111111+1=00000000

补码求原码


已知一个数的补码,求原码的操作其实就是对该补码再求补码 
⑴如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
⑵如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
例:已知一个补码为11111001,则原码是10000111(-7)。
因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;再加1,所以是10000111。

意义


补码“模”概念的引入、负数补码的实质、以及补码和真值之间的关系所揭示的补码符号位所具有的数学特征,无不体现了补码在计算机中表示数值型数据的优势,和原码反码等相比可表现在如下方面 [3]
(1)解决了符号的表示的问题 [3]
(2)可以将减法运算转化为补码的加法运算来实现,克服了原码加减法运算繁杂的弊端,可有效简化运算器的设计 [3]
(3)在计算机中,利用电子器件的特点实现补码和真值、原码之间的相互转换,非常容易 [3]
(4)补码表示统一了符号位和数值位,使得符号位可以和数值位一起直接参与运算,这也为后面设计乘法器除法器等运算器件提供了极大的方便。总之,补码概念的引入和当时运算器设计的背景不无关系,从设计者角度,既要考虑表示的数的类型(小数、整数、实数和复数)、数值范围和精确度,又要考虑数据存储和处理所需要的硬件代价。因此,使用补码来表示机器数并得到广泛的应用,也就不难理解了。 [3]

推荐代码 查看3165 所有题解 上传题解视频得图灵币

本题记录 用 户(点击查看用户) 运行号(点击购买题解) 时 间
算法最快[$0 $ms] 毕怀森 1060256 2024-01-12 13:16:36
内存最少[$2020 $KB] dsad 834409 2022-04-05 22:42:45
第一AC 计爱玲 561829 2020-01-04 21:52:47
第一挑战 计爱玲 561829 2020-01-04 21:52:47

赛题来源/所属竞赛 N/A

竞赛编号 竞赛名称 竞赛时间 访问比赛
1790 2023-2024-1学期《程序设计技能实训》博弈论、二进制和位运算【23计算机】 2023-12-18 00:00:00 请登录
1730 2022-2023-1学期《C语言程序设计》:指针和二进制【22计算机】 2022-12-20 09:00:00 请登录
1675 2021-2022-1学期《程序设计技能实训》二进制和位运算【21计算机1234】 2021-12-14 07:00:00 请登录
1602 2020-2021-1学期《程序设计技能实训》二进制和位运算【20计算机12345】 2020-12-25 18:00:00 请登录
1494 2019-2020-1学期《Python语言程序设计》期末考试【19数据科学12班】 2020-01-05 10:00:00 请登录