目录
在计算机科学领域,数制与编码是基础且关键的概念,它们如同大厦的基石,支撑着整个计算机系统的运行。今天,让我们一同深入探究数制与编码的奥秘,从二进制、八进制、十进制到十六进制,再到原码、反码、补码和移码,全面剖析这些元素如何构建起计算机的数字世界。
一、进制转换:数制间的桥梁
(一)二进制转十进制
二进制数转换为十进制数,采用位权展开法。例如,对于二进制数 1011.101,从小数点左边开始,位权依次为 2 的 0 次方、2 的 1 次方、2 的 2 次方、2 的 3 次方…… 小数点右边位权依次为 2 的 -1 次方、2 的 -2 次方、2 的 -3 次方……。将每一位数字乘以对应的位权后相加,可得十进制数:1×2³ + 0×2² + 1×2¹ + 1×2⁰ + 1×2⁻¹ + 0×2⁻² + 1×2⁻³ = 8 + 0 + 2 + 1 + 0.5 + 0 + 0.125 = 11.625。
(二)八进制转十进制
八进制数转换为十进制数的原理与二进制类似,只是位权的基数变为 8。如八进制数 345.6,转换为十进制数为:3×8² + 4×8¹ + 5×8⁰ + 6×8⁻¹ = 192 + 32 + 5 + 0.75 = 229.75。
(三)十六进制转十进制
十六进制数中,每一位数码有 16 种情况,用 0 - 9 和 A - F 表示。转换为十进制数时,同样根据位权展开。例如,十六进制数 2A3.B,转换为十进制数为:2×16² + 10×16¹ + 3×16⁰ + 11×16⁻¹ = 512 + 160 + 3 + 0.6875 = 675.6875。
(四)二进制与八进制、十六进制的转换
二进制转八进制时,三位二进制数对应一位八进制数。例如,二进制数 1101011,从右至左每三位一组,001 101 011,分别转换为八进制数 1 5 3,所以二进制数 1101011 转换为八进制数为 153。二进制转十六进制时,四位二进制数对应一位十六进制数。如二进制数 11010110,分组为 1101 0110,转换为十六进制数 D6。反之,八进制转二进制时,将每一位八进制数转换为三位二进制数;十六进制转二进制时,将每一位十六进制数转换为四位二进制数。
(五)十进制转其他进制
十进制数转换为其他进制数,整数部分采用除基取余法,小数部分采用乘基取整法。以十进制数 25.625 为例,整数部分 25 除以 2,取余数,直到商为 0,得到二进制整数部分 11001。小数部分 0.625 乘以 2,取整数部分,重复操作,得到二进制小数部分 0.101。所以,十进制数 25.625 转换为二进制数为 11001.101。
二、定点数与浮点数:数字的存储方式
(一)真值与机器数
日常生活中使用的带正负号的数为真值,而在计算机中,用 0 和 1 表示数,将真值转换为 01 序列存储的数称为机器数。例如,真值 +5 在计算机中可能存储为 0101(假设为四位二进制数),真值 -5 可能存储为 1101。
(二)定点数与浮点数概念
定点数约定小数点在寄存器的固定位置,如在八位寄存器中,约定在最后一位时为定点整数,约定在符号位后一位时为定点小数。浮点数则不约定小数点的固定位置。
(三)定点整数详解
以四位寄存器为例,四位二进制数分为符号位和数值位。符号位用 0 表示正,1 表示负,数值位表示数的大小。
- 原码:原码的思想简单,符号位表示正负,其余位表示真值的绝对值。如四位原码中,0101 表示真值 +5,1101 表示真值 -5。原码存在两个问题,一是零有两种表示方式( +0 和 -0),二是加减法运算不方便。
- 补码:补码的核心思想是模运算,通过特定的构造方式,使减法运算可转换为加法运算。在四位补码中,0000 表示真值 0,1000 表示真值 -8(四位二进制数能表示的最小负数)。补码在数轴上的分布特点是机器数和真值的单调性一致,从最小负数到最大正数单调递增。
- 反码:反码是原码到补码转换的中间步骤,对于负数,原码的符号位不变,其他位按位取反得到反码。如原码 1101 的反码为 1010。反码主要用于原码和补码之间的转换,本身作用不大。
- 原反补之间的转换
- 正数部分:原码、反码、补码表示相同,符号位为 0,数值位为真值的绝对值对应的二进制数。
- 负数部分:原码的负数符号位为 1,数值位为绝对值的二进制数;补码是原码的符号位不变,数值位按位取反后末尾加 1;反码是原码符号位不变,数值位按位取反(不包括最小真值,如四位机器数中的 -8,原码和反码无法表示,需单独记忆)。补码转换为原码,可直接对补码进行符号位不变,其他位按位取反末尾加 1 的操作。
- 变补概念:变补是求某个数相反数的补码。如已知 X 的补码,求 -X 的补码,可对 X 补码的各位(包括符号位)按位取反末尾加 1。
- 移码:移码主要用于 IEEE 754 标准中表示浮点数的阶码。移码的机器数和真值单调性相同,方便比较大小。移码的核心公式为求真值 X 的移码是 2 的 N 次方加上 X(注意偏移值在不同情况下可能不同,如 IEEE 754 中偏移值为 2 的 N 次方减 1)。
(四)无符号数概念
无符号数是一种特殊的编码方式,所有二进制位都用于表示数值,没有符号位。例如,八位无符号数能表示的最小值为 0(二进制 00000000),最大值为 255(二进制 11111111)。常用于表示内存地址等全部为正数且不出现负值的情况。
三、编码的重要性
数制与编码在计算机中起着至关重要的作用。正确的编码方式确保了计算机能够准确地存储、处理和传输数据。不同的编码方式适用于不同的场景,如原码、反码、补码在整数运算中的应用,移码在浮点数阶码表示中的优势,以及无符号数在特定情况下的使用。它们共同构建了计算机数字世界的基础架构,使得计算机能够高效、准确地运行各种程序和处理各种数据。
在计算机的世界里,数制与编码如同隐形的语言,默默地支撑着一切数字操作。无论是简单的数值计算,还是复杂的图像处理、网络通信,都离不开这些基础概念的支持。深入理解数制与编码,是打开计算机科学大门的一把钥匙,也是我们在数字时代畅游的必备技能。
希望通过本文的介绍,你能对数制与编码有更清晰、更全面的认识,为进一步学习计算机相关知识奠定坚实的基础。