比如计算机怎样储存数据要储存一个数,那么他是储存这个数的原码还是反码还是补码还是移码?

机器数有无符号数和带符号数之汾无符号数表示正数,在机器数中没有符号位对于无符号数,若约定小数点的位置在机器数的最低位之后则是纯整数;若约定小数點的位置在机器数的最高位之前,则是纯小数对于带符号数,机器数的最高位是表示正、负的符号位其余位置表示数值。若是小数点嘚位置在机器数的最低位之后则是纯整数;若是约定小数点的位置在机器数的最高位之前(符号位之后),则是纯小数

下面是带符号嘚机器数的原码、反码、补码、移码的编码方法:

  1. .原码表示法:数值X的原码记为[X]原,如果机器字长为n(即采用n个二进制位表示数据)则原码的定义如下:

(“。”表示的是小数点的位置)

在原码表示法中最高位是符号位,0表示符号为正1表示为负,其余的n-1位表示数的绝對值数值0的原码有两种形式:  [+0]原=0 0000000,

(2).反码表示法数值X的反码记作[X]反,如果机器字长为n则反码定义如下:

(“。”表示的是小数点嘚位置)

在反码表示法中最高位是符号位,0表示符号为正1表示为负。其中正数的反码与其原码相同负数的反码是其绝对值按位求反。数值0的反码有两种形式:  [+0]反=0 0000000

(3)补码表示法。数值X的补码记作[X]补如果机器字长为n,则补码定义如下:

(“”表示的是小数点的位置)

在补码表示法中,最高位是符号位0表示符号为正,1表示为负其中正数的补码与其原码相同,负数的反码则等于其反码的末尾加1數值0的补码有唯一的编码:  [+0]补=0 0000000,[-0]补=0 0000000

(4)移码表示法:移码表示法是在数X上增加一个偏移变量来定义的,常用于表示浮点数中的阶码如果机器字长为n,规定偏移量为2^(n-1)则移码定义如下:

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

总结:机器数的原码表示法可以看做以二进制表示注意在负数的情况下需要将符号位置为1。而反码表示法在整数的情况下是和原码一樣的在负数的情况下,是将原码中除了符号位①以外的所有位置都变为相反的(1变成00变成1)。补码表示法在整数的情况下是和原码、反码一样的而负数情况下是在最后一位加1(注意,是加1而不是将最后一位变成1)。移码表示法是在补码的基础上无论正负都把符号位变为相反的(1变成0,0变成1)

注:①关于符号位的概念开头就讲过了。

说明:以下讨论都是用8位来存储嘚数据类型:char类型, 

为什么为什么用补码呢?我反复思考着后来在王爽的汇编语言里和网上找到了答案,有如下总结:


原码的数出现0和-0嘚两个码!我们知道-0== 0;所以00 0000两个码会表示同一个数!

8位数据可以表示-127~127的254个有符号数。但是理论上8位数据是可以表示255中不同信息的


同样反码吔只能表示-127~127的254个有符号数。0出现重码


补码可以表示-128~127的255个有符号数;

不仅如此,补码还有很多特性这些特性为符号数的运算提供了方便。(而且有些特新“原码”和“反码”是不具备的)

补码定义:正数的补码与原码相同;负数的补码是对其原码逐位取反但符号位除外;然后整个数加1。

[X]补:表示X的补码

|X|:表示X的绝对值

4)  正数的补码取反加1后为其对应的负数的补码;负数的补码取反加1后为其绝对值的补码。

自己证奣的也许有错误,如果有错望指教!

计算机怎样储存数据内部采用二進制表示数值
如十进制数10用二进制数表示为1010。设计算机怎样储存数据字长为8即1Byte。最高位表示符号0为正,1为负

  正数时:原码、反码、補码相同

 反码=(正数反码全部取相反的数即0变为1;1变成0)

我要回帖

更多关于 计算机怎样储存数据 的文章

 

随机推荐