你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 3623|回复: 7

知道 补码,如何 计算 原码 ?

[复制链接]

57

主题

403

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-7-15
发表于 2016-11-28 11:44:53 | 显示全部楼层 |阅读模式
本帖最后由 myfocus-2048857 于 2016-11-28 11:47 编辑

ADS1220给出的转换结果是 补码形式,为了 计算 输入的模拟量大小,需要 转换为原码。

请教:
知道 补码,如何 计算 原码 ?

如 补码为0x80 0000h,原码如何计算 ?
我的思路是:用原码 转 补码 的逆运算(减1,然后 再各位取反)。
按照上面的思路 计算:
0x80 0000H的原码为:0000 0000 0000 0000 0000 0000;
0xFF FFFFH的原码为:1000 0000 0000 0000 0000 0001.

不知道 是否 正确,还请大侠指点 !
非常感谢!



回复

使用道具 举报

5

主题

1584

回帖

11

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2016-11-28 14:04:34 | 显示全部楼层
本帖最后由 zhoupxa 于 2016-11-28 14:33 编辑

正数原码、补码相同,无需转换;
负数原码可以这么计算:
原码=0-补码=-补码(当然,补码=0-原码=-原码),这里的0取数据字长所能表示的最大正数加1,也就是模值。
其实就是取负,由于自然溢出,和取反加1一个效果。

比如对于8位有符号数来说:
模为256,负数范围从-128到-1。

-1的补码就是0xff(256-1)
-2的补码就是0xfe(256-2)
......
-127的补码就是0x81(256-127)
-128的补码就是0x80(256-128)
同样,知道补码求原码:

0xff的原码就是-1(256-0xff,注意是负数,所有有负号)
0xfe的原码就是-2(256-0xfe,注意是负数,所有有负号)
......
0x81的原码就是-127(256-0x81,注意是负数,所有有负号)
0x80的原码就是-128(256-0x80,注意是负数,所有有负号)

其实这样表示和转换负数原码、补码的根源就在于,负数补码的引入把计算机中的减法运算变成了加法运算(计算机只会加法啊)。
回复 支持 1 反对 0

使用道具 举报

5

主题

1584

回帖

11

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2016-11-28 14:27:11 | 显示全部楼层
楼主的减1取反也未尝不可,貌似楼主计算有误。
回复 支持 1 反对 0

使用道具 举报

5

主题

1584

回帖

11

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2016-11-28 14:21:55 | 显示全部楼层
本帖最后由 zhoupxa 于 2016-11-28 14:25 编辑

ADS1220的转换结果是24位有符号数,模值为0x100 0000,对于补码表示的负的转换结果X,其数值可以这么计算:
0x100 0000 - X

0x80 0000对应就是:
0x100 0000 - 0x80 0000 = 0x80 0000(这个结果只是数值)
0xff ffff对应就是:
0x100 0000 - 0xff ffff = 0x00 0001(这个结果只是数值)
回复 支持 1 反对 0

使用道具 举报

57

主题

403

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-7-15
 楼主| 发表于 2016-11-28 16:39:35 | 显示全部楼层
zhoupxa 发表于 2016-11-28 14:21
ADS1220的转换结果是24位有符号数,模值为0x100 0000,对于补码表示的负的转换结果X,其数值可以这么计算: ...

非常感谢大神的 精彩、耐心、信息...的回复,好激动呀,看您的回帖,就是 一种 享受,如食 干酪一般....

大神的回复,和 ADS1220的datasheet正好印证...

无标题.png
回复 支持 反对

使用道具 举报

50

主题

1057

回帖

67

蝴蝶豆

论坛元老

最后登录
2020-12-2
发表于 2016-11-28 23:01:17 | 显示全部楼层
反码求解的确会把人搞迷。8位机和32位机的补码就一样。当然你的24位也不一样。我们不妨说是N位计算系统,那X 的补码就是2^N - X。
很简单是不是。那么你会问为什么。举一个最简单的例子,(-5) + 5 应该是多少?我们假定系统是8位运算系统。-5怎么表示呐,就是2^8 - 5, 5还是5.两者加起来就是 2^8.因为计算溢出,剩下的结果就是0.同样的举一个随便的例子比如10 + (-100) 计算时候就是100 + (2^8 - 10) = 2^8 + (10-100) = 2^8 - 90 结果就是-90用反码表示。

那通过这种方式就能统一正负数值的计算。
回复 支持 反对

使用道具 举报

57

主题

403

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-7-15
 楼主| 发表于 2016-12-1 17:14:45 | 显示全部楼层
watershade 发表于 2016-11-28 23:01
反码求解的确会把人搞迷。8位机和32位机的补码就一样。当然你的24位也不一样。我们不妨说是N位计算系统,那 ...

谢谢大侠,学习了 !
回复 支持 反对

使用道具 举报

13

主题

695

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-6-7
发表于 2016-12-1 17:59:07 | 显示全部楼层
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版