| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8976 人关注过本帖
标题:求问补码和移码的关系
只看楼主 加入收藏
SKYYYF
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:71
专家分:184
注 册:2012-9-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
求问补码和移码的关系
我查了N多资料,都是这样说的:

===============第一种===============================
 [X]移与[X]补的关系是符号位互为反码
 例如: X=+1011     [X]移=11011     [X]补=01011
        X=-1011     [X]移=00101     [X]补=10101
 =========================================================

但《微型计算机原理》第五版(姚燕南)这本书中的移码是这样定义的
===============第二种===================================
   移码是在数的真值上加一个偏移量形成的,定义如下:
    [X]移=2^(n-1)-1+X   
    X  的范围为   2^(n-1)   >=  X  >  -2^(n-1)
     其中X表示二进制数真值,n表示包括符号位和数值部分在内的二进数位数,2^(n-1)  -  1为偏移量
================================================================

这样,就出现了一个问题。
 一个数X,按照第一种方法求得的移码X1,和第二种方法求得的移码X2,不相等,并且  相差1  


在此,想问下各位朋友,哪种方法是正确的?
搜索更多相关主题的帖子: 计算机 资料 
2015-01-21 20:56
SKYYYF
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:71
专家分:184
注 册:2012-9-23
收藏
得分:0 
在汇编论坛上问了没人说。。。,只能在这里问问,看有没有人知道
2015-01-21 20:57
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
不要死记公式,记住原理后,想用时随手就能推导出需要的公式。
假设一个二进制数只有两位,那么它可以有4种状态 { 00 01 10 11 }
有人想用它们表示 { -2 -1 0 1 }(偏移量是 2的1次方 ),所以 -1的移码是-1+2即01,+1的移码是+1+2即11
有人想用它们表示 { -1 0 1 2 }(偏移量是 2的1次方再减1 ),所以 -1的移码是-1+1即00,+1的移码是+1+1即10
2015-01-22 10:49
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:5 
如果书上不能看明白,写出来的还是看不明白

我不是砖家,要努力成为砖家。
2015-01-22 11:42
SKYYYF
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:71
专家分:184
注 册:2012-9-23
收藏
得分:0 
回复 3楼 rjsp
我问的并不是记不记公式,而是哪种方法正确。

一个确定的数,他的移码应该是惟一的,但是用上面两个不同的方法算出来的移码却不一样,所以应该有一个是错的。问题是哪个是正确的,哪个是错误的?

比如一个数的真值是   -10101 ,则原码是  110101   (确定的)
按照第一种方法,移码应该是              001011   
按照第二种方法,移码应该是              001010   (与上面的  001011  不一样)

可以看出来,同一个数,按照上面不同的方法算,求得的移码不一样,难道不奇怪?

我的问题是,哪种方法是正确的,哪种是错误的?
2015-01-23 13:15
SKYYYF
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:71
专家分:184
注 册:2012-9-23
收藏
得分:0 
回复 4楼 砖家的谎言
书上的我能看懂,可能我的问题没说清楚,又说了一遍,请看  5楼
2015-01-23 13:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 5楼 SKYYYF
我在三楼已经回复过了,看“有人……有人……”那段是怎么描述的?

既然第一段说“[X]移与[X]补的关系是符号位互为反码”,那不就是 2^(n-1)   >  X  >=  -2^(n-1) 吗?
既然第二段说“2^(n-1)   >=  X  >  -2^(n-1)”,那更没什么好说的了
2015-01-23 13:36
SKYYYF
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:71
专家分:184
注 册:2012-9-23
收藏
得分:0 
回复 7楼 rjsp
那我给你一个题
[-10101]移=______
请问你怎么填?
2015-01-23 13:53
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
举个例子,老VB中 1代表“否” 0代表“真”;新VB中 1代表“真” 0代表“否”。
现在你脱离作用环境,问我0代表什么,我能回答个屁呀?!

一共偶数个状态,一个状态用于表示0,余下奇数个状态,不是负数比正数多一个,就是正数比负数多一个。
几乎已经约定俗成的都是[-2^n, +2^n-1],所以你给出的第一种方法的偏移值为 -2^n
还用移码的地方也就剩IEEE754了,IEEE754中阶码范围是[-2^n+1, +2^n],所以你给出的第二种方法的偏移值为 -2^n+1而且别人还明确说明了“X  的范围为   2^(n-1)   >=  X  >  -2^(n-1)”

--------------------------------------------------------------------

估计你还是懒得去看3楼的那短短两行字
[-10101]移=______怎么填?
若值域为[-16,+15],也就是你给出的第一种方法所在的环境中,填01011;
若值域为[-15,+16],也就是你给出的第二种方法所在的环境中,填01010。
2015-01-23 14:54
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:5 
回复 4楼 砖家的谎言
这句话我喜欢

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-01-26 19:07
快速回复:求问补码和移码的关系
数据加载中...
 
   



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

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