Fork me on GitHub

数字逻辑

我们都知道数字逻辑的概念很杂,很细,虽然每个概念都很简单,但是当很多概念放在一起的的时候,就容易混淆。现在就来再理一理这些容易混淆的概念吧。

带符号数的代码表示

真值与机器数

原码、反码、补码的出现就是为了使计算机的运算更高效,可以将减法转换成加法。更加方便和高效。

原码

原码又称“符号-数值表示”。在以原码表示的正数和负数中,第一位表示符号位,对于正数,符号位记作 $0$,对于负数,符号位记作1,其余各位表述数值部分。

反码

反码又称为“对1的补数”。用反码表示时,左边第一位也是符号位,符号位为 $0$ 代表正数,符号位为 $1$ 代表负数,反码的数值是将原码数值按位求反,即源码的某位为 $1$ ,反码的相应位就为 $0$ 。而对于正数,原码和反码相同。所以,反码数值的形成与它的符号位有关。只有负数的反码和原码不相同。

补码(补码的出现是统一“0”的形式)

补码又称为“对2的补数”。在补码表示中,正数的表示同原码和反码的表示还是一样的,而负数的表示却不同。对于负数,其符号位为 $1$ ,而数值位是将原码按位求反加 $1$ ,即按位取反,再在最低位加 $1$ 。

机器数的加、减运算

原码运算

原码中的符号位仅用于表示数的正负,不参与运算,进行运算的只是数值部分。原码运算时,首先比较两个数的符号,若两个数的符号相同,,则两个数相加就是将两个数的数值相加,结果的符号不变;若两个数的符号不同,就需要进一步的比较两数数值的相对大小,两数相加就是将数值较大的数减去数值较小的数没,结果的符号与数值较大的数的符号相同。

概括来说,原码运算就是符号位不参与运算,数值等于两数数值相加减。

反码运算

反码运算同补码运算一样,两数和的反码等于两数的反码之和,两数差的反码可以用两数反码的加法来实现。运算时,符号位和数值位一样参与运算,如果符号位产生了进位,则此进位应与运算结果的最低位求和,称之为 “循环进位”

概括来说,反码运算就是符号位参加运算,符号位的进位与最低位求和。

补码运算

补码的运算规则为:两个和的补码等于两数的补码之和,而两数差的补码也可以用加法来实现。运算时,符号位和数值位一样参与运算,如果符号位产生进位,则将此进位“丢掉”。运算结果的符号位位 $0$ 时,说明是正数的补码;运算结果为 $1$ 时,说明是负数的补码。

概括来说补码运算就是符号位参加运算,将符号位的进位丢弃。

十进制数的补数

对10的补数

十进制数“对10的补数”与二进制数的补码类似。
对于十进制正数 $N$,其“对10的补数”的形式是:符号位为0,数值部分则为十进制数 $N$ 本身。
例如,十进制正数 $N=5493$,其“对10的补数”为
$$[N]_ {10补}=05493$$
而对于十进制负数 $N$,其“对10的补数”一般形式为
$$[N]_ {10补}=10^n+N,-10^{n-1}<N<0$$
其中,$n$是十进制负数 $N$ 的整数部分的位数(包括一位符号位)。

由此可见,只要用10减最低位非0的数,然后用9减所有较高位的数,就可以形成十进制数的“对10的补数”。

-------------本文结束感谢您的阅读-------------
obsidian wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持是我最大的动力!
  • 本文作者: obsidian
  • 本文链接: http://ooobsidian.github.io/2017/09/24/数字逻辑/
  • 版权声明: 本博客所有文章除特别声明外,均为作者测试键盘性能与显示器性能所用,文章内容为随机生成,如有雷同,不胜荣幸。转载请注明出处!