| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 936 人关注过本帖
标题:【求助】!!!补码问题
只看楼主 加入收藏
stevenwu
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2013-12-7
收藏
得分:0 
回复 8楼 小小战士
早看过啦 ,说了等于没说
2013-12-07 22:40
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
回复 11楼 stevenwu
你是这样回应别人的热情帮助的?


莫问前尘有愧,但求今生无悔
2013-12-07 22:51
小习小习
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:6
帖 子:1467
专家分:4792
注 册:2012-7-2
收藏
得分:0 
左边的第一位是符号位,你知道求补码表示的数吗?先取反在加1,第一位是符号位,我们不管,1表示负数,那么剩下 000,0000,0000,0000对他取反,那么变成111,1111,1111,1111在加1,就变成1000,0000,0000,1000(32768d)符号为负号,所以就是-32768,只能帮你到这儿了,不知道去百度

实现自己既定的目标,必须能耐得住寂寞单干。
2013-12-07 22:56
wht750109
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:49
专家分:151
注 册:2013-10-21
收藏
得分:0 
0有正0和负数0,负数补码为取反加一,负0是1000 0000 0000 0000,除符号位取反1111 1111 1111 1111,即0xFFFF, 加一是0x8000,象钟表一样,0点和12点还有福12点一样,因此将0用补码表示时,正0为0,负0为负圈,即-32768,效果一样,并且避免了0的重复,成为唯一的数。因此补码0不再有两个,负0为负一圈的最大的数即-32768.因此,补码的范围为-32768->0->32767,便于计算。比如钟表可以说-12到-1一圈,0点到11一圈,
2013-12-07 23:49
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
回复 11楼 stevenwu
好吧,我服了,再给你详细的说

首先,我们可以运算求得-1的补码是 1111 1111 1111 1111,32767的补码就是原码是0111 1111 1111 1111
因为 (32767) + (-32768) = -1
所以-32768的补码就是1000 0000 0000 0000,证明-32768的补码就是1000 0000 0000 0000没错


下一步,在C中,用高位置1来表示负数,short型占2个字节共16位,32768的二进制是1000 0000 0000 0000,高位为1,系统会认为是负数,所以32768需要用长型表示,占4个字节。最高位就不是1了。(0000 0000 0000 0000 1000 0000 0000 0000)
-32768在内存中的表示是1000 0000 0000 0000。过程是:先读入正值32768(1000 0000 0000 0000),再取反(0111 1111 1111 1111),再加1(1000 0000,0000 0000)

再下一步:short型占2个字节共16位,最大的short类型的数为0111 1111 1111 1111 十进制中即 32767,再加1为32768,二进制为:1000 0000 0000 0000,其首位是1,系统会认为是负数,所以16位类型的数字中最大的是32767。32位类型的数字中有32768,原码为0000 0000 0000 0000 1000 0000 0000 0000 0000,反码为1111 1111 1111 1111 0111 1111 1111 1111,在最后位上加1得到-32768的补码1111 1111 1111 1111 1000 0000 0000 0000,取低16位,1000 0000 0000 0000就是-32768的补码,符合符号的规定。所以short类型的数据范围就是-32768~32767。

在short类型的数中,-32768比较特殊,最高位占用了符号位,也就是最高位1就是符号位,也就是最高位1既充当数据的角色,也充当符号表示的角色,不需要再多加1了

小小战士,战士中的战斗机!
2013-12-07 23:52
stevenwu
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2013-12-7
收藏
得分:0 
回复 14楼 wht750109
其实我的意思也是这样 我是这样回复三楼的
2013-12-08 12:45
stevenwu
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2013-12-7
收藏
得分:0 
回复 14楼 wht750109
你应该是说0-0分为 0-6跟6-12吧
2013-12-08 12:49
stevenwu
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2013-12-7
收藏
得分:0 
回复 15楼 小小战士
人家定义了短整型好不好,规定了2个字节,何来四个字节储存,,我觉得是-32768-(-1);0-32767 刚好65536
2013-12-08 13:05
stevenwu
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2013-12-7
收藏
得分:0 
回复 12楼 pycansi
他怎么热情了   重复贴三个字,还有你 说了几个数字,你这么牛 可以不教的
2013-12-08 13:07
stevenwu
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2013-12-7
收藏
得分:0 
对方提供地方
2013-12-08 13:12
快速回复:【求助】!!!补码问题
数据加载中...
 
   



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

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