标题:[原创]带符号数表示--机器数与真值--原码
只看楼主
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
结帖率:66.67%
 问题点数:0 回复次数:4 
[原创]带符号数表示--机器数与真值--原码

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: 死了都要C E-mail:w2008_ QQ:47441651
*/ 时间: 2007-8-16 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

机器数与真值



由于计算机只能直接识别和处理用0,1两种状态表示的二进制形式的数据,所以在计算机中无法按人门日常的书写习惯

用正负号加绝对值来表示数值,而与数字一样,需要用二进制代码 01 来表示 , 号.这样,在计算机中表示带符号

的数值数据时,数符和数据均采用0,1进行了代码化.这种采用二进制表示形式的连同数符一起代码化了的数据,在 计算机

中统称为机器数或机器码
.而与机器数对应的用正,负符号加绝对值来表示的实际数值称为真值.


机器数可分为无符号数和带符号数两种.无符号数是指计算机字长的所以二进制位均表示数值.带符号数是指机器数分

为符号和数值部分,且均用二进制代码表示
.


例 : 设某机器的字长为 8 位,无符号整数在机器中表示形式为:


7 0
-------------
数 值
-------------

带符号整数在机器中的表示形式为:


7 6 0
-------------
符号 | 数值
-------------

分别写出机器数 10011001 作为无符号整数和带符号整数对应的真值.

解: 10011001 作为无符号整数时,对应的真值是 10011001(二进制) = 153(十进制) .
10011001 作为带符号整数时,其最高位的数码1代表符号"-",所以与机器数 10011001 对应的
真值是 - 0011001(二进制) = - 25(十进制).



综上所述,可得机器数的特点为:

(1) 数的符号采用二进制代码化,0代表"+',1代表"-".通常将符号的代码放在数据的最高位.

(2) 小数点本身是隐含的,不占用储存空间.

(3) 每个机器数数据所占的二进制位数受机器硬件规模的的限制,与机器字长有关.超过机器字长的数值要舍去.

例如,如果要将 x=+0.101100111在字长为8位的机器中中表示为一个单字长的数,则只能表示为01011001,最

底两位的两个1无法在机器中表示.



因为机器数的长度是由机器硬件规模规定的,所以机器数表示的数值是不连续的.例如,8位的二进制无符号数可以

表示256个整数: 00000000-11111111可表示0-255; 8位二进制带符号数中: 00000000-01111111可表示正整数0-127;

11111111-10000000 可表示负整数 -127-0;,共256个数,其中00000000表示+0,10000000表示-0.


在计算机中, 为了方便于带符号数的运算和处理,对带符号数的机器数有各种定义和表示方法,下面将接受带符号

数的原码,补码,反码和移码表示.





原 码

原码表示的一种简单,直观的机器数表示方法,其表示形式与真值的形式最为接近.原码表示规定机器数的最高位为符

号位
,0表示整数,1表示负数,数值部分在符号位后面,并以绝对值形式给出.


1. 原 码 的 定 义 .


设 x 为二进制数,数值部分的位数为 n ,下式给出了 x 为纯小数 ±0.x1x2...xn 和 x 为纯整数 ±x1x2...xn时

的原码表示的定义.


纯 小 数 原 码 的 定 义 :



X ( 1 ≤ X < 1 )
[X]原 = ( X为纯小数 )
1 - X = 1 + |X| ( -1 < X ≤ 0)



纯 整 数 原 码 的 定 义 :



X ( 0 ≤ X < 2^n ) 2^n指2的n次方后面都这样表示
[X]原 = ( X为纯整数 )
2^n - X = 2^n + |X| ( -2^n < X ≤ 0)


根据定义可以知, X 的原码 [X原] 是一个 n+1 位的机器数 x0x1x2....xn ,其中 x0 为符号位, x1x2...xn 为数值

部分, n 为 X 数值的长度.



例 已知 X , 求 X 的原码[X原].

(1) X = +0.1010110 (2) X =-0.1010110 (3) X = +1010110 (4) X = -1010110

解: 根据原码的定义,可得
(1) [X原] = X = 0.1010110
(2) [X原] = 1-X = 1+0.1010110 = 101010110
(3) [X原] = X = 01010110
(4) [X原] = 2^7-X = 2^7 + 1010110 = 10000000+1010110 = 11010110


由例题可知 :

(1) [X原]的表示形式 x0x1x2...xn 为符号位加上 X 的绝对值. 当 X≥0 时,符号位 x0=0; X≤0 时,符号

位 x0=1.

(2) 当 X 为纯小数时,[X原]中的小数点默认在符号位 x0 数值最位 x1 之间; 当 X≥ 0时,[X原]=X;当X≤0

时,[X原] = 1+|X| ,既符号位加上X的小数部分的绝对值.

当 X 为纯整数时,[X原]中的小数点默认在数值位最底位 xn 之后; 当 X≥ 0时,[X原] = X; 当X≤0

时,[X原] = 2^n+|X| ,其中 2^n 是符号位的权值, 2^n+|X| 相当于使符号位为 1 .

(3) 将[X原]的符号取反,既可得到 [-X原] .



2. 原 码 中 0 的 表 示


根据定义式可知,在原码表示中,真值0有两种不同的表示形式,既 +0-0 .


纯小数 +0 和 -0 的原码表示:

[+0原] = 0.00...0 [-0原] = 1.00...0

纯整数 +0 和 -0 的原码表示:

[+0原] = 00...0 [-0原] = 100...0



3. 原 码 的 左 移 和 右 移


对于二进制纯小数 x = 0.x1x2...xn 来讲, 在求 2x 时,只需要将 x1x2...xn 依次左移一位,移出的最底位的空格

位填 0 即可, 即 2x=x1.x2...xn0 . 当然,为了保证 x 左移后仍然是纯小数, 0.x1x2...xn 中的 x1 应为 0, 否则就

会大于1, 而不是纯小数了. 在求 1/2x 时, 只需要将 x1x2...xn 依次右移一位,移出的最高位的空格
位填 0 即可, 即
1/2x=0.0x1x2...xn .如果仍然要保持 n 为数值, 则 x 右移后 ,将丢失最底位数字 xn .二进制纯整数的左,右移也可

以同样处理.


由于原码是在二进制真值的基础上增加了符号的机器数,根据二进制数的移位规则个原码的定义,可知原码的移位规

则是: 符号位不变,数值部分左移或右移,移出的空位填 0 .




例: 已知[X原],求[2X原],[1/2X原].

(1) [X原] = 0.0101001 (2)[X原] = 10011010

解: (1) [2X原] = 0.1010010 左移后,符号位保持不变,最高位移出,最低位填 0 .
[1/2X原] = 0.0010100 右移后,符号位保持不变,最高位填 0,末尾的1移出.

(2) [2X原] = 10110100
[1/2X原] = 10001101

在原码的左移过程中,主要不要将高位的有效位数值育雏,否则将回出错.





4. 原 码 的 特 点


(1)原码表示直观,易懂,与真值的转化容易.

(2)原码表示中的 0 有两种不同的表示形式,给使用带来了不便.
通常 0 的原码用 [+0原] 表示,若在计算过程中出现了[-0原] ,则需要用硬件将 [-0原] 变为 [+0原] .

(3)原码表示加减运算复杂.




利用原码进行两次相加运算时,首先要判别两数的符号,若同号则做加法,如异号则做减法.在利用原码进行相减时 ,不

仅要判别两数绝对值的符号,使得同号相减,异号相加;还要判别两数绝对值的大小,用绝对值大的数减去绝对值小的数,取

取绝对值大的数的符号为结果符号. 可见原码表示不便于实现加减运算.



今天发的是原码知识````其他3码后面再发````不好意思啊```







搜索更多相关主题的帖子: 机器数 真值 符号 计算机 中国 
2007-08-16 21:27
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
得分:0 
啊呀``有几个错别字啊````

0表示整数,1表示负数 改: 0表示正数,1表示负数

原码表示的一种简单 加: 原码表示的是一种简单


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-08-16 21:30
jun0325
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2007-8-8
得分:0 

xuexue!


数据结构+算法+程序设计方法+语言工具和环境=程序
2007-08-16 22:00
血侵女宿舍
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-7-13
得分:0 

看过了  组成原理  学完C 为汇编语言做准备

2007-08-16 22:08
zihanga
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-12-25
得分:0 
回复 楼主 死了都要C
机器码0x20代表的真值为32,是直接转换为十进制就是32。
机器码0XFFFF代表的真值为-1,得转换为原码在转换为十进制才是-1,求解真值是谁代表的实际值。
2014-12-25 20:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-163277-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.180940 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved