您的位置:首页 > 理论基础

计算机中的信息表示(原码、反码、补码、ASCII码)

2014-10-29 21:51 495 查看
我们知道,不管是数字还是字符,在计算机中,都是以二进制编码进行表示、存储和处理的。

既然这样,那么为什么有时候我们又听到说 字符数据是以ASCII码、数值是以补码、原码、反码等形式存储的?那么情况是这样的, 在计算机中存储和处理的的确都是些二进制数据,只是说 这些二进制数据 是 以上的 那些信息表示形式 的一种映射。比如 字符 ‘A’,那么计算机在内部存储的就是 它对应的ASCII码 的整数值(65)的二进制形式(0100-0001),相当于把字符A对应到数值65(当然这个对应的规则就是ANSI制定的了),然后计算机存储字符A的时候,就会把他当作
数值65来进行存储,于是 ,计算机存储的便是 数值65的二进制形式0100-0001了


数据大体就分为数值和字符,那么下面就分别介绍一下这两种数据的存储形式

1.计算机中,数的存储

在计算机中,数也分为 有符号数和无符号数两种。在数学中,用正负号来区别 正负数, 但计算机只认识0和1 不认识 -+号,所以计算机便用数的二进制位的最高位来判断此数值是正还是负。计算机规定0为正,1为负。 比如,在一个8位字长的机器内,65被表示为01000001。

(1)原码:

用原码表示数时,最高位为符号位,也就是说剩下的7位用于表示数值。那么这里就涉及到一个范围了,

当此数为负数时,最高位为1,那么剩下的7位数据最大可为 1111111,转换成十进制就是 -127, 同理,此数为正数时,最大可为0 1111111,也就是 127,所以,这里范围便为[-127,127] 即 -(2^7 -1)~2^7-1,这里引出一个公式:

对于一个n位的二进制数,其原码表示范围为 -(2^(n-1) -1)~[b](2^(n-1) -1).[/b]

用原码表示时,对于-0和+0的编码不一样。假设机器字长为8位,-0的编码为10000000,+0的编码为 00000000

反码:用反码表示数时,最高位依然为符号位,正数用0表示,负数用1表示。

正数的反码与原码相同,而负数的反码则在 原码(负数的原码)的基础上符号位不变(为1),其他位取反得到。

反码的表示范围与原码相同-(2^(n-1)-1)~+(2^(n-1)-1)

-0的反码 1 111 1111 +0的反码 0000 0000

补码:和原码 、反码一样,补码也是最高位为 符号位,0为正,1为负,正数的补码与原码相同。 负数在其原码的基础上,符号位不变,其余位取反,再+1。

对于一个负数x的补码,可以用公式 2^n -|x| 得到,其中n为计算机字长。

由于[+67]原=01000011B

[-25]原=10011001B

所以

[+67]补=01000011B

[-25]补=11100110+1=11100111B

那么根据 2^n-|x|公式也能得出 [-25]补=2^8-25=256-25=231

231=11100111B

这里还有一个求补运算能方便地计算一个数的补码形式:

对于一个二进制数,其符号位不变其他位取反+1得到其补码形式

比如[-25]原=10011001

[-25]补=1 1100110+1=1 1100111

补码的表示范围为 -(2^(n-1))~+(2^(n-1)-1) 也就是说,对于字长为8位的CPU,其补码表示范围为 -128~127,但为什么原码和反码最小是-127,补码却是-128呢?

这是因为 "0" 的问题,在补码中,+0和-0实现了统一,都为00000000B表示,并且规定 10000000B为-128的补码,所以 其表示范围就成了 -128~+127

BCD码(Binary-Coded-Decimal 十进制编码) 分为 分为压缩BCD码和非压缩BCD码。

压缩BCD码又称为8421码,它用 4位二进制 来表示一位十进制符号。

比如123的压缩BCD码形式为 0001 0010 0011

非压缩BCD是用8位二进制表示一位十进制符号,其中,每八位中的第四位二进制码和压缩BCD相同,高四位任取。

如123 可用非压缩BCD表示为 0011 0001 0011 0010 0011 0011

我们熟知的ASCII码便是非压缩BCD码的表示方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: