首页
社区
课程
招聘
[求助]重新学习了一下补码知识,结果发现这程序不正确
发表于: 2014-7-1 13:36 4588

[求助]重新学习了一下补码知识,结果发现这程序不正确

2014-7-1 13:36
4588
int _tmain(int argc, _TCHAR* argv[])
{
        int orign = 0x000003E8; //  Decimal : 1000 原码:0000 0000 0000 0000 0000 0011 1110 1000
        int dc = 0x10000001; // Decimal : -1 原码: 1000 0000 0000 0000 0000 0000 00001
        printf("%d\n",orign - dc);
        return 0;
}

输出的结果是-268434457
不是应该结果为
orign[补] + dc[补] = 999 么。
为什么VC将dc作为无符号数了?
还是-1的 原码有错?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
0x10000001  你再仔细翻译翻译。。。 这玩意 转成二进制可不是像你那样写的。。。

1000  != 1  

1000   == 8
2014-7-1 13:44
0
雪    币: 55
活跃值: (519)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
1000  != 1  

1000   == a
这两个是什么意思呢?
2014-7-1 13:56
0
雪    币: 345
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
int dc = 0x10000001; // Decimal : -1 原码: 1000 0000 0000 0000 0000 0000 00001

符号位是最高字节的最高位,不是最高字节的最低位,所以应该是0x80000001
2014-7-1 14:04
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
对对对。应该是8 ... 我记错了。
2014-7-1 14:07
0
雪    币: 168
活跃值: (823)
能力值: ( LV10,RANK:173 )
在线值:
发帖
回帖
粉丝
6
1. 主要是-1的原码搞错了
2. 建议直接用补码表示计算
2014-7-1 14:22
0
雪    币: 55
活跃值: (519)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
7
我又测试了诸如 -3(0x80000003) -10(0x8000000A)
等数的十六进制形式,在这个程序中得到的结果始终为无符号数的加减结果。
怎么破?
难道是因为我减去了一个负数的原码,结果成为了一个加法?
2014-7-1 14:25
0
雪    币: 168
活跃值: (823)
能力值: ( LV10,RANK:173 )
在线值:
发帖
回帖
粉丝
8
你定义的0x80000003,计算机根本不认为是-3,你可以int -3,然后看看-3在内存中是如何表示的,其实是用补码的。
2014-7-1 14:33
0
雪    币: 68
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
。。。。-3怎么可能是0x80000003
0x80000000是最小的负数,就是-2147483648
0x80000003是-2147483645

-3的补码是0xFFFFFFFD

很多汇编书都说不清楚补码。。乱说一通。
《深入理解计算机系统》第二章是对整数编码的详细剖析,如果能坚持看完的话,一辈子都不会忘记补码的知识。
国内汇编书上说的神马取反加一,啥原理都不讲,看了也白看。
2014-7-1 14:43
0
雪    币: 68
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
网速太慢,重复发了一条,删掉。。
2014-7-1 14:45
0
雪    币: 55
活跃值: (519)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
11
用vc的自带调试发现:
        int dc = 0x80000001;
        int dcd = -1;

dc  = -2147483647
dcd = -1
2014-7-1 14:55
0
雪    币: 1
活跃值: (1174)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
-1 是0xffffffff
= ~1 + 1
= ~00000001 + 1
= FFFFFFFE + 1
2014-7-1 18:13
0
游客
登录 | 注册 方可回帖
返回
//