渗透第1天 原码补码反码-女黑客-必火安全学院

女黑客

 找回密码
 立即注册

QQ登录

只需一步,快速开始

渗透第1天 原码补码反码

[复制链接]
发表于 2022-8-8 20:38:42 | 显示全部楼层 |阅读模式
https://wenku.baidu.com/view/35d ... aad1f346931179.html
原码、反码、补码

什么是原码、反码、补码
原码:将一个整数,转换成二进制,就是其原码。如单字节的5的原码为:0000 0101;-5的原码为10000101。
反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。如单字节的5的反码为:00000101:-5的反码为1111 1010。
补码:正数的补码就是其原码;负数的反码+1就是补码。如单字节的5的补码为:00000101;-5的补码为11111011。
二、为什么要有这三类码
计算机只能识别0和1,使用的是二进制。而在日常生活中人们使用的是十进制,并且我们用的数值有正负之分。于是在计算机中就用一个数的最高位存放符号(0为正,1为负)。这就是机器数的原码了。
有了数值的表示方法就可以对数进行算术运算但是很快就发现用带符号位的原码进行除运算时结果正确而在加减运算的时候就出现了问题,如下:假设字长为8bits
(1)10-(1)10=(1)10+(-1)10=(0)10
(00000001)原+(10000001)原=(1010)原=(-2)显然不正确。
因为在两个整数的加法运算中是没有问题的,干是就发现问题出现在带符号位的负数身上。对除符号位外的其余各位逐位取反就产生了反码。反码的取值空间和原码相同目一一对应。下面是反码的减法运算:(1)10-(1)10=(1)10+(-1)10=(0)10
(00000001反+(11111110反=(11111111反=(0)有问题。(1)10-(2)10=(1)10+(-2)10=(-1)10
(00000001)反+(11111101反=(11111110反=(-1)正确。
问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的。(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大)。
于是就引入了补码概念。负数的补码就是对反码加一,而正数的补码不变,正数的原码反码补码是一样的。在补码中用(-128)代替了(-0),这个是人为规定的,所以补码的表示范围为:(-128~0~127)共256个。
注意:(-128)没有相对应的原码和反码,(-128)=(10000000)补码的加减运算如下:(1)10-(1)10=(1)10+(1)10=(0)100000)补+(11111111)补=(00000000)补=(0)正确。(1)10-(2)10=(1)10+(-2)10=(-1)10(00000001)补+(11111110)补=(11111111)补=(-1)正确。所以补码的设计目的是;(1)使符号位能与有效值部分一起参加运算,从而简化运算规则。补码机器数中的符号位,并不是强加上去的,是数据本身的自然组成部分,可以正常地参与运算。(2)使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、c等其他高级语言中使用的都是原码。

二、NOIP历年真题

1(NOIP2017初赛普及组题1)在8位二进制补码中,10101011表示的数是十进制下的(B)
A.43 B.-85 C.-43 D.-84

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|女黑客 |网站地图

© Copyright 2021 版权所有(一极教育科技有限公司)

津ICP备17008032号-3
快速回复 返回顶部 返回列表