二进制专题(持续更新)

    科技2026-03-10  6

    机器数和真值

    在计算机中,表示数值的数字符号只有 0 0 0 1 1 1 两个数码,无法在二进制数前再加正负号, 所以我们规定最高位为符号位 ,并用 0 0 0 表示正数符号,用 1 1 1 表示负数符号。 这样,机器中的数值和符号全“数码化”了。

    为简化机器中数据的运算操作,人们采用原码、补码、反码以及移码等几种方法对数值位和符号位统一进行编码。

    为区别起见,我们讲在机器中的这些编码称为 机器数, (如 10000001 10000001 10000001 ) 而将一般书写表示的数称为 机器数的真值。 (如 − 0000001 -0000001 0000001


    数的原码、反码和补码表示

    我们一般只会记忆它们之间怎么转化,但是,

    你知道它们究竟是什么吗?

    原码、补码、反码实际上是上文所讲的 机器数 的 表示方法 。 它们表示的是一个机器数的不同形式。 为什么要有不同形式? 正如上文的高亮所说,是为了简化机器中数据的运算操作,最后是简化到只需要进行加法运算。

    我们按惯例先介绍一下它们之间的转化方式: 设 x = 1100110 x=1100110 x=1100110 ,则 [ x ] 原 = [ x ] 反 = [ x ] 补 = 01100110 [x]_{原}=[x]_{反}=[x]_{补}=01100110 [x]=[x]=[x]=01100110 x = − 1100110 x=-1100110 x=1100110 ,则 [ x ] 原 = 11100111 [x]_{原}=11100111 [x]=11100111 [ x ] 反 = 10011000 [x]_{反}=10011000 [x]=10011000 [ x ] 补 = 10011001 [x]_{补}=10011001 [x]=10011001

    对于正数来说,它的原码、反码、补码都是它的真值本身。 对于负数来说,它的原码是把真值前的负号换成 1 1 1 ,反码是 它的原码对所有数值位取反的结果 ,补码是它的反码加 1 1 1

    注: [ − 10000000 ] 原 = 10000000 [-10000000]_{原}=10000000 [10000000]=10000000 如何用加法实现减法运算?

    我们不把它看成 一个数减一个数 , 而是一个负数和另一个数相加, 用补码表示法表示这两个数,再相加, 得到一个 机器数 , 把它看成补码表示法表示的数, 最后用原码还原,得到正确的值。


    数的定点表示和浮点表示

    在计算机中,小数点一般有两种表示法: 一种是小数点固定在某一个位置的 定点表示法 , 另一种是小数点的位置可任意移动的 浮点表示法 。

    定点表示法

    机器中所有数的小数点是固定不变的,因而小数点就不必使用记号表示出来。 实际上,小数点可固定在任何一个位置上。

    浮点表示法

    在数的定点表示法中,由于数的表示范围较窄,常常不能满足各种数值问题的需要。为了扩大数的表示范围,方便用户使用,有些计算机常采用浮点表示法。 表示一个浮点数,要用两部分: 尾数 和 阶码

    尾数:用以表示数的有效数值 阶码:用以表示小数点在该数中的位置

    计算机多数情况下采用浮点数表示数值,它与科学计数法相似, 把一个二进制数 通过移动小数点位置 表示成阶码和尾数两部分: N = 2 E × S N=2^{E}\times S N=2E×S 其中: E E E N N N 的阶码,是有符号的整数, S S S N N N 的尾数,是数值的有效数字部分,一般规定取二进制纯小数形式。

    例: 1011101 B = 2 + 7 × 0.1011101 1011101B=2^{+7}\times 0.1011101 1011101B=2+7×0.1011101 101.1101 B = 2 + 3 × 0.1011101 101.1101B=2^{+3}\times 0.1011101 101.1101B=2+3×0.1011101 0.01011101 B = 2 − 1 × 0.1011101 0.01011101B=2^{-1}\times 0.1011101 0.01011101B=21×0.1011101


    Processed: 0.160, SQL: 9