|
主题 : : 谁知道怎么快速算出补码的方法。。 [待解决] |
回复[ 15次 ]
点击[ 924次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-05-02 19:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-06-26 05:02 |
|
|
|
|
|
[第1楼]
[ 回复时间:2010-05-06 15:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
|
|
|
|
|
[第2楼]
[ 回复时间:2010-06-22 15:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-01-03 14:44 |
|
|
|
|
|
[第3楼]
[ 回复时间:2010-06-28 23:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:1
注册日期:2010-06-14 18:42 |
最高位如果为1就是负数 取反加1之后就是该负数的绝对值
最高位如果是0则是该数本身 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-11-13 10:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-09-16 18:13 |
|
|
|
|
|
[第5楼]
[ 回复时间:2010-11-19 12:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-29 09:56 |
正如杀人最好的方法是用手枪而不是功夫一样,算补吗最快的方法当然是计算机了,下个特定的软件或win7自带的计算器都可以。但是你要知道补码的原理,这就够了,实在没必要自己动手算! | | |
|
|
|
|
[第6楼]
[ 回复时间:2010-12-03 21:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-12-03 12:38 |
|
|
|
|
|
[第7楼]
[ 回复时间:2010-12-03 21:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-12-03 12:38 |
|
|
|
|
|
[第8楼]
[ 回复时间:2010-12-04 16:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-04-08 17:43 |
给你说个简单的方法 用电脑的计算器 点查看-科学型 然后用16进制 ,0-(你要求补码的数)=补码
也可以 0-(补码)=补码所代表的数。 不信你是一是 呵呵 | | |
|
|
|
|
[第9楼]
[ 回复时间:2011-01-10 15:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-12-13 12:23 |
根据 donggs02整理出来的,非常感谢他提供如此便捷的方法
;求补码原码的方法
;正数的补码是本身,负数的补码是其绝对值取反后加1.
;求反的方法:假设待求反的数是N位的,那么用N位的最大值(2^N-1)减去这个数即可完成对其求反.
;如对1001求反:1111-1001=0110.
;由于求补码还要加上1,所以求某一负数a的补码可以用2^N-1 - a + 1 = 2^N - a = 0 -a,即补码 = 0 - 原码.
;同理可以得出求原码的方法:原码 = 0 - 补码. | | |
|
|
|
|
[第10楼]
[ 回复时间:2011-01-10 21:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
|
|
|
|
|
[第11楼]
[ 回复时间:2011-02-25 21:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-25 14:56 |
正数补码 = 该正数
负数补码 = 可以表示的最大正数-该数绝对值+1,符号不变
其实就是求mod运算
比如8位有符号数,最大为127(2^7-1)= FFh = 1111111B
求-65的补数:
十进制求法:127-65+1=63,补码为-63
十六进制求法:FFh-41h+1h=BFh
二进制求法:1,1111111-0,1000001+1=1,0111110+1=1,0111111;或者除符号位每位求反再加一 | | |
|
|
|
|
[第12楼]
[ 回复时间:2011-06-20 10:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:16
注册日期:2010-04-02 01:09 |
若数据不溢出
则:无符号运算得数=有符号运算得数
利用这点:-65=0-65=100H(cf借1)-41H=BFH
-130=0-130=10000H-82H=FF7EH(不能让数据溢出) | | |
|
|
|
|
[第13楼]
[ 回复时间:2011-07-08 00:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-05-03 16:34 |
扫描法。。。二进制数据,(负数)从最后一位开始遇到0不变遇到的第一个1不变然后其他按位取反
eg:原码 10000101010100000
扫描 为 11111010101100000
(符号位不变) | | |
|
|
|
|
[第14楼]
[ 回复时间:2011-08-30 23:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-08-30 22:20 |
|
|
|
|
|
[第15楼]
[ 回复时间:2013-06-17 19:23 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2013-06-11 13:26 |
正数如:0001 1100=>16+8+4=28
负数: 1000 1111 =>0000 1111 + 1000 0000=15 + (-128)=-113 | | |