C++:signed int为什么表示正数的时候是2的31次方-1;而表示负数的时候是-2的31次方,就是说负数为啥要多1
1个回答
展开全部
这个涉及到一定位数的二进制数可以表示的数的范围。我们以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。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询