原码、反码、补码概念及转换


数据在计算机内部是以补码的形式存储

数据分为有符号数和无符号数

无符号数为正数,有符号数为负数,计算机内部是以补码的形式存储的

正数的首位地址为0,其原码是由十进制数转换为二进制数

负数的首位地址为1,其原码是由十进制数转换为二进制数,然后将首位地址改为1

对于一个数,计算机要使用一定的编码方式进行存储,原码、反码、补码是机器存储一个具体数字的编码方式,原码、反码、补码是计算机原理的术语。说白了就是为了理解计算机使用二进制进行运算的原理。对于C/C++来说,是和数据类型有关的

一、原码、反码、补码

三种表示法的转换过程如下:

原码、反码、补码概念及转换


说明:

特别的,在原码中0有两种表示方式:[+0]原=0000000,[-0]原=1000000。

在反码表示中,0也有两种表示形式:[+0]反=0000000,[-0]反=11111111。

在补码表示中,0有唯一的编码:[+0]补=0000000,[-0]补=0000000。


二、移码

移码表示法是在数X上增加一个偏移量来定义的,常用来表示浮点数中的阶码,所以是整数。如果机器字长为n,规定偏移量为2^(n-1)。若X是整数,则[X]移=2^(n-1)+X

则[+45]=+0101101+10000000, [-45]=-0101101+10000000=01010011

实际上由此可推出,在偏移2^(n-1)的情况下,只要将补码的符号位取反便可获得相应的移码表示。

原码、反码、补码概念及转换


说明:在移码表示中,0也编码是相同的,[+0]移=1000000,[-0]移=1000000。

计算机之所以这些编码方法是为了便于运算,提高运算速度。四种表示方法其实是层层递进的,即会求十进制的二进制表示,记住符号位的正负表示,知道怎么递进的它们之间的关系。


分享到:


相關文章: