C语言编程机器码转真值,c语言程序设计谭浩强机器码.docx

数的机器码表示

在计算机屮对数据进行运算操作时,符号位如何表示呢?是否也同数值位一道 参加运算操作呢?为了妥善的处理好这些问题,就产生了把符号位和数字位一起 编码来表示相应的数的各种表示方法,如原码、补码、反码、移码等。为了区别 一般书写表示的数和机器中这些编码表示的数,通常将前者称为真值,后者称为 机器数或机器码。

1.原码表示法

若定点小数的原码形式为X2…xn,则原码表示的定义是

r *1>

r *

1>灼0

[xh=

{

11一 无=1 + | 无

ON x> — \

(2. 7)

式中[*]原是机器数,x是真值

例如,x=+0. 1001,则[x]原=0.1001

x=-0. 1001,则[x]原=1. 1001

对于0,原码机器中往往有“ +o”、分,故有两种形式:

[+0]腹=0? 000... 0

[-0]原=1. 000... 0

若定点整数的原码形式为X0 XI X2…xn,则原码表示的定义是

r x2"> xNO

[*]原=S(2. 8)

5—x=2“+ x 0^ x>-2n

采用原码表示法简单易懂,但它的最大缺点是加法运算复杂。这是因为,当 两数相加吋,如果是同号则数值相加;如果是异号,则要进行减法。而在进行减 法时还要比较绝对值的大小,然后大数减去小数,最后还要给结果选择符号。为 了解决这些孑盾,人们找到了补码表示法。

2.补码表示法

我们先以钟表对时为例说明补码的概念。假设现在的标准时间为4点正;而 有一只表已经7点了,为了校准时间,可以采用两种方法:一是将吋针退7-4=3 格;一是将时针向前拨12-3=9格。这两种方法都能对准到4点,由此可以看出,减3和加9是等价的,就是说9是(-3)对12的补码,可以用数学公式表示

-3 = +9 (modl2)

mod 12的意思就是12模数,这个“模”表示被丢掉的数值。上式在数学上 称为同余式。

上例中其所以7-3和7+9(mod 12)等价,原因就是表指针超过12时,将12 自动丢掉,最后得到

16-12二4。从这里可以得到一个启示,就是负数用补码表示时,可以把减法转化 为加法。这样,

在计算机中实现起来就比较方便。

若定点小数补码形式为xo. xi X2…%n,则补码表示的定义是

r x1> 心0

(2. 9)[幻补={(mod

(2. 9)

I 2+ x =2— x 02x2 — 1

例如,^=+0. 1011,则[幻补=0.1011

x=-0. 1011,贝ij[ x]补=10+ x = 10. 0000-0. 1011 = 1. 0101

对于 0, [+0]补=[—0]补= 0.0000(mod 2)

注意,0的补码表示只有一种形式。

采用补码表示法进行减法运算就比原码方便得多了。因为不论数是止还是负, 机器总是做加

法,减法运算可变为加法运算。但根据补码定义,求负数的补码要从2减去|x|。 为了用加法代替

减法,结果还得在求补码时作一次减法,这显然是不方便的。下面介绍的反码表示 法可以解决负

数的求补问题。

对定点整数,补码表示的定义是

(2. 10)

所谓反码,就是二进制的各位数码0变为1, 1变为0。也就是说,若Xi二1, 则反码为xi=o;若

xi二0,则反码xi二1。数值上面的一横表示反码的意思。在计算机中用触发器寄 存数码,若触发器

Q端输出表示原码,则其Q端输出就是反码。由此可知,反码是容易得到的。

对定点小数,反码表示的定义为

r x

r x

1>心0

[幻反=Y

1 (2-2 n) + x

0$ x> — \

(2. 11)

其屮n代表数的位数。

在一些文献屮,这种以2为基数的反码又称为1的补码。

一般情况下,对于正数x = +0. XI X2???xn,贝

[x]反=0. X\ X2Xn

对于负数X = —O. X1X2…xn,则有

[x]反=1?XI X2???Xn

对于0,有[+0]反和[―0]反之分:

[ + 0]反=0. 00... 0

[―0]反=1. 11... 1

我们比较反码与补码的公式

[幻反=(2 —2"n) + x

[幻补=2+ x

可得到

(2. 12)[*]补=[x]反+2一

(2. 12)

这就是通过反码求补码的重耍公式。这个公式告诉我们,若要一个负数变补 码,其方法是符

号位置1,其余各位0变1, 1变0,然后在最末位(2切上加1。

r x2">

r x2">

[幻反=<

1 (2“t — 1)+x 0^ x>-2n

4.移码表示法

对定点整数,反码表示的定义为

(2. 13)

移码通常用于表示浮点数的阶码。由于阶码是个n位的整数,所以假定定点 整数移码形式

为xo xi肌…xn吋,对定点整数,移码的定义是

[幻移=

[幻移=2"+/2n> x> — 2n

(2. 14)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值