我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:王中王 > 定点运算 >

一个数的原码反码补码怎么算

归档日期:08-14       文本归类:定点运算      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  比如10的原码就是00001010,+10的原码是00001010,最高位的0代表 这个数是正数(最高位就是符号位). -10的原码就是10001010,最高位的1代表这个数是负数

  +10的原码是00001010,那他的反码,补码都和原码相同 也是00001010,原因是正数的原 反 补码相同

  -10的原码是10001010,那他的反码是11110101,也就是符号位不变,其他位0变1,1变0. 他的补码是在反码的基础上,最低位加1,也就是11110110.

  特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)

  所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

  反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

  补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

  1)模的概念:把一个计量单位称之为模或模数。例如,时钟是以12进制进行计数循环的,即以12为模。在时钟上,时针加上(正拨)12的整数位或减去(反拨)12的整数位,时针的位置不变。14点钟在舍去模12后,成为(下午)2点钟(14=14-12=2)。从0点出发逆时针拨10格即减去10小时,也可看成从0点出发顺时针拨2格(加上2小时),即2点(0-10=-10=-10+12=2)。因此,在模12的前提下,-10可映射为+2。由此可见,对于一个模数为12的循环系统来说,加2和减10的效果是一样的;因此,在以12为模的系统中,凡是减10的运算都可以用加2来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。10和2对模12而言互为补数。

  同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。当计数器计满8位也就是256个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,8位二进制数,它的模数为28=256。在计算中,两个互补的数称为“补码”。

  负数:负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。

  a.采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值。采用补码进行运算,所得结果仍为补码。

  b.与原码、反码不同,数值0的补码只有一个,即 [0]补=00000000B。

  c.若字长为8位,则补码所表示的范围为-128~+127;进行补码运算时,应注意所得结果不应超过补码所能表示数的范围。

  展开全部首先,机器数是有上限的,以8位数为例,只有256个数可以处理,即00000000到11111111

  补码是为了计算方便而发明的。原始计算器只能做加法不能做减法,但是科学家发现,例如7+(-5)=2可以这样算:7+(-5) = 7+(10000-5)-10000 = 10002 - 10000 = 2 。这很奇怪,因为机器太傻,只能做加法,但是虽然不会减法,-10000还是很方便的,只要去掉开头的1;用10000减也是很方便的,因为可以用9999减然后+1,而用9999减,只要把每一位用9减。这就弥补了不能做减法的不足。以10000为基准,我们说-5的补码是9995,因为它们加上7后,一个是2,一个是10002,只相差一个最高位(有趣的是,计算机计算高位会溢出,比如对于8位计算,256或更大的数需要超过8位来表示,会因放不下被舍去,结果就完全相同了)。均衡正负,补码也是用00000000~11111111表示-128~127,正数部分照旧,但是用11111111表示-1,11111110表示-2,以此类推到-128,因为7+(-2)=5,7+11111110(即254)等于231,二进制表示要9位:100000101,舍去第一位为00000101,就是5 。这就是【补码】

  反码是为了方便计算补码,提出的称呼。十进制每一位取反不就是用9999减么?二进制就是用11111111减,等价于取反(因为只有2个数字,而十进制有10个)。对于-128到0之间的数,比如-5,即-00000101,按位取反即可。但是原码是把第一位当成符号的,所以你可以先写成【自然二进制表示】,然后全部取反。之所以有反码,是因为反码很好算(按位取反),然后+1就是补码,因此充当了一个中间角色。

  展开全部原码:就是常规的二进制数编码。其中,有符号整数时二进制最高位表示符号位,0为正,1为负;无符号整数时所有位都用来表示数值。

  以下都以1个字节8bit的数为例,如果用1个字节表示无符号数,那么255的原码就是11111111, 127的原码就是01111111,显示表示范围是0~255共256个数;

  如果用1字节8bit表示有符号整数,那么最高位表示符号位,低7位表示数值,显示255越界了表示不了,-127的原码就是11111111,正127的原码是01111111,也即表示范围是-127~127共255个数,其中有正0和负0两种方法表示0.。

  正整数的反码、补码跟原码一样,当然如果是无符号整数,也就无所谓什么码了,因为都是一样的。

  负数的反码:就是在原码的基础上,符号位不变,其余位对应取反,也是0变为1,1变为0. 比如-1,原码是10000001,那么反码就是11111110.

  再来负数的补码:在反码的基础上,加1。所以-1的补码就是11111111了。

  为什么会有反码补码的概念?为什么说计算机里的整数都是存的补码而不是原码?

  反码的作用只是为了引出补码,关键就是补码的存在,实际上就是为了方便计算机里的负数加法或者说叫减法运算,有了补码后,负数运算也变成正数运算了,减法运算也变成加法运算了。

  也即是说int8_t类型的-1与uint8_t的255是在二进制层面上相等的,当你用==去判断的时候结果为线_t类型的变量赋值为-1时,它的值实际就是255.

  于是负数补码从另一个概念上讲,实际上就是如果某个二进制码加上该负数绝对值之后等于0了,那么该二进制码就是该负数的补码。11111111 + 1后为0了,那么11111111就是-1的补码,同理,11111110是-2的的补码。

  推荐于2017-12-07展开全部计算机中的存储系统都是用2进制储存的,对我们输入的每一个信息它都会自动转变成二进制的形式,而二进制在存储的时候就会用到原码,反码和补码

  数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚. (摘自数学发展史有空大家可以看看哦~,很有意思的).为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制(23).下面进入正题.

  数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为

  有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits

  因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算:

  问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).

  于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:

本文链接:http://brazil-run.com/dingdianyunsuan/1011.html