计算机数据表示

2022-09-12 From 程序之心 By 丁仪

进制与转换

这里主要关注二进制和十六进制。二进制符号为0b,一般表示为0b0011,十六进制符号为0x或H,可表示为0x18F或18FH。(十六进制可表示0-15,其中10-15用A-F来表示)。

R 进制整数转十进制采用位权展开法,用 R 进制数的每一位乘以 R 的 n 次方。n 是变量,从 R 进制数的整数最低位开始,依次为 0 , 1 , 2 , 3 ... 累加。

十进制整数除以R,记录每次所得余数,若商不为 0,则继续除以 R,直至商为 0,而后将所有余数从下至上记录,排列成从左至右顺序,即为转换后的R进制数。

m 进制转 n 进制类似。先将 m 进制转化为十进制数,再将十进制数转化为 n 进制数,中间需要通过十进制中转,但下面两种进制间可以直接转化:

  • 二进制转八进制:每三位二进制数转换为一位八进制数,二进制数位个数不是三的倍数,则在前面补0(原则是数值不变),如二进制数01101有五位,前面补一个0就有六位,为001101,每三位转换为一位八进制数;
  • 二进制转十六进制:每四位二进制数转换为一位十六进制数,二进制数位个数不是四的倍数,则在前面补0,如二进制数101101有六位,前面补两个0就有八位,为0010 1101,每四位转换为一位十六进制数。

数据表示

机器数:各种数值在计算机中表示的形式,其特点是使用二进制计数制,数的符号用 0 和 1 表示,小数点则隐含,不占位置。

机器数有无符号数和带符号数之分。无符号数表示正数,没有符号位。带符号数最高位为符号位,正数符号位为 0,负数符号位为 1。

定点表示法分为纯小数和纯整数两种,其中小数点不占存储位,而是按照以下约定:

  • 纯小数:约定小数点的位置在机器数的最高数值位之前。
  • 纯整数:约定小数点的位置在机器数的最低数值位之后。

真值:机器数对应的实际数值。

带符号数有下列编码方式,当真值为 -45 时:

原码:一个数的正常二进制表示,最高位表示符号,数值 0 的源码有两种形式 +0 (00000000) 和 -0 (10000000)。-45 对应原码为10101101;

反码:正数的反码即原码,负数的反码是在原码的基础上,除符号位外,其他各位按位取反。数值 0 的反码也有两种形式 +0 (00000000)、-0(11111111)。-45 对应反码为11010010;

补码:正数的补码即原码,负数的补码是在原码的基础上,除符号位外,其他各位按位取反,而后末位 +1,若有进位则产生进位。因此数值 0 的补码只有一种形式 +0=-0=00000000。-45 对应补码为11010011;

移码:用作浮点运算的阶码,无论正数负数,都是将该原码的补码的首位(符号位)取反得到移码。-45对应移码为 01010011。

浮点数表示方法为 N=F*2^E,其中 E 称为阶码,F 称为尾数。类似于十进制的科学计数法,如 85.125 = 0.85125*10^2,二进制如 101.011=0.101011*2^3.

在浮点数的表示中,阶码为带符号的纯整数,尾数为带符号的纯小数,要注意符号占最高位(正数 0 负数 1),其表示格式如下:

阶符 阶码 数符 尾数

很明显,与科学计数法类似,一个浮点数的表示方法不是唯一的,浮点数所能表示的数值范围由阶码确定,所表示的数值精度由尾数确定。

尾数的表示采用规格化方法,也即带符号尾数的补码必须为 1.0xxxx(负数)或者 0.1xxxx(正数),其中 x 可为 0 或 1。

浮点数的运算:

  1. 对阶(使两个数的阶码相同,小阶向大阶看齐,较小阶码增加几位,尾数就右移几位)
  2. 尾数计算(相加,若是减运算,则加负数)
  3. 结果规格化(即尾数表示规格化,带符号尾数转换为 1.0xxxx 或 0.1xxxx)

校验码

码距:就单个编码 A:00 而言,其码距为 1,因为其只需要改变一位就变成另一个编码。在两个编码中,从 A 码到 B 码转换所需要改变的位数称为码距,如 A:00 要转换为 B:11,码距为 2。一般来说,码距越大,越利于纠错和检错。

奇偶校验码:在编码中增加 1 位校验位来使编码中 1 的个数为奇数(奇校验)或者偶数(偶校验),从而使码距变为 2。奇偶校验只能检 1 位错,并且无法纠错。

CRC 只能检错,不能纠错。使用 CRC 编码,需要先约定一个生成多项式G(x)。生成多项式的最高位和最低位必须是 1。假设原始信息有 m 位,则对应多项式 M(x)。生成校验码思想就是在原始信息位后追加若干校验位,使得追加的信息能被 G(x) 整除。接收方接收到带校验位的信息,然后用 G(x) 整除。余数为 0,则没有错误,反之则发生错误。

海明码本质也是利用奇偶性来检错和纠错的校验方法,构成方法是在数据位之间的确定位置上插入 k 个校验位,通过扩大码距实现检错和纠错。设数据位是 n 位,校验位是 k 位,则 n 和 k 必须满足关系 2^k - 1 >= n + k。

本文来源:程序之心,转载请注明出处!

君子曰:学不可以已。
《计算机科学导论(原书第4版)》

本书是国际知名的高等学校计算机科学及相关专业基础课教材,也是非常受欢迎的计算机入门读物。该教材是一本百科全书式的计算机专业入门指南,涉及计算机科学的方方面面。虽然读者对象是计算机专业的学生,但这本书深入浅出、引人入胜,勾画出了计算机科学体系的框架,可以为有志于IT行业的学生奠定计算机科学知识的基础,架设进一步深入专业理论学习的桥梁。

发表感想

© 2016 - 2024 chengxuzhixin.com All Rights Reserved.

浙ICP备2021034854号-1    浙公网安备 33011002016107号