ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

原码、反码、补码

2021-06-10 23:58:24  阅读:17  来源: 互联网

标签:10 反码 运算 浮点数 补码 原码


机器树

计算机存储数据信息都是以二进制编码存储的,机器内存储的数据的表达形式称为“机器数”,而它代表的数制称为这个机器数的“真值”。

数有正负之分,那么在计算机里怎么表示正负呢,0和1不就刚好吗?呵呵,没错,就是用“0”表示正号,“1”表示负号,符号位放在数的最高位。例如,二进制数X=(+1010100),Y=(-1010100),则他们在机器中就存为
在这里插入图片描述
最左边那一位是符号位,跟它后面的数字一起组成一个数。

原码

最高位是符号位,后面是绝对值来表示一个数,这种编码叫做“原码”。但是有个问题,就是0的表示不唯一,+0就是000…0,-0就是1000…0。

另外,进行四则运算时,对于符号位都要单独处理,同号怎样运算,异号又怎样运算,有时还需要借位,这对计算机来说是很麻烦的,所以必须找更好的编码方法。

反码

其实反码不怎么用,但是怎么说是一种编码方式,而且是求补码的中间码,我们还是需要学一下的。

正数的反码跟原码一样,负数的反码的符号位跟原码一样,但其余各位取反,也就是0变1,1变0。

例如,二进制数+1100111的原码是01100111,反码也是01100111,-1100111的原码是11100111,反码则是10011000。

补码

往前调2个小时,也可以往后调10个小时,结果都是7点。这里就涉及到取模运算(以前我们叫求余运算),9-2 = 7,(9+10)%12 = 7,这里的%就是C++里的取模运算符。2与10对模数12是互为补数的。

补码就是利用的这个原理,利用补码可以把减法运算变成两个补码相加,具体就是将其变为一个正数和一个负数的加法运算,然后计算这个正数和负数的补码,两个补码相加。因为补码的符号位作为数值参与运算,所以就不存在符号位单独处理的问题。

正数的原码、反码和补码是一模一样的。

负数的补码是其反码的最末位加1得到的,我们经常顺口记为负数的补码就是取反加1。

必须要指出的是补码运算的结果也是补码,还要把它算到原码才得到最后结果。那么知道补码怎么计算原码,很简单,就是对补码再求补码就是源码了。

例子

10-67 = ?,10的原码是00001010,补码跟原码一样,-67的原码是11000011,补码是10111101。两个补码相加是11000111,这是结果的补码,求原码要对这个补码再求补码,取反加1后就是10111001。

浮点数的存储方式

浮点数可以理解为小数。浮点数N的科学表示法为:N=M×2E。E表示2的幂,叫做N的阶码,它的位数反应了此浮点数的范围。M表示N的全部有效数字,叫做N的尾数,它的位数反应了浮点数的精度。

浮点数的存储格式随着机器的不同而不同,比如,如果机器是16位机,其二进制浮点数的组成为4位阶码,12位尾数,存储格式如下:
在这里插入图片描述

标签:10,反码,运算,浮点数,补码,原码
来源: https://blog.csdn.net/qq_36314864/article/details/117793588

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有