C++:signed int为什么表示正数的时候是2的31次方-1;而表示负数的时候是-2的31次方,就是说负数为啥要多1

 我来答
岩岩de梦想
2018-01-22 · TA获得超过2448个赞
知道大有可为答主
回答量:1917
采纳率:74%
帮助的人:1192万
展开全部
这个涉及到一定位数的二进制数可以表示的数的范围。我们以4位为例。当表示unsigned时,毋庸置疑,它表示的范围是0-15。但是当表示有符号signed时,第一位作为了符号位,那么它表示的范围就是1111-0111,本来应该是-7到+7,但是你可能会发现,里面出现了0000个1000,这两个都表示0,而0是没有正负之分的,所以不能有两个位串同时表示0。那么我们可以发现,根据二进制的补码运算规则,1000进行数值计算的到的结果,是和-8计算的结果相同的。比如,用1000+0101,那么先转换为补码想加,即1000+0101=1101,再转换为源码得1011,即-3,我们知道0101表示+5,那么1000即表示了-8,所以才有1000-0101=-8+5=-3,所以,4位有符号二进制数表示的范围就是-8-7,讲到这儿,相信你也明白了为什么表示负数的时候要多1,因为不能同时出现两个0,而-0在补码运算中就相当于-2^n。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式