c++中内存溢出与正负数表示问题

以short类型举例:
在c++中,short类型占两个字节的空间,每个字节为8位,即short类型占16位。

正负数表示

我们通常都会说,一个16位的数字所能表示的值为0~2^16-1。但是我们不只是会用到正数,负数在我们日常生活中也是必不可少的,那么计算机就想我该怎么表示负数呢?

按照正数与负数是成对出现的原理,那我们怎么把一半的正数变成我们想要的负数呢,计算机说那我把从二进制最高位为1的这些数表示为负数吧,1000 0000 0000 0000本来是32768,现在我把他当做-32768,1000 0000 0000 0001本来是32769,现在我把他当作-32767,这样也符合我们对负数的理解,-32767要比-32768大1。依次到2^ 16 -1 即1111 1111 1111 1111,正好他就表示-1了,那再连上0与正数部分,所以我们就得到了用二进制表示的一个实数范围,-2^ 15~2^15-1。细心的小朋友会发现,负数的绝对值与其对应的表示所代表的正数相加恰好等于这个二进制能代表的数字的数目的多少,即65536。

内存溢出

刚才我们说完了一个16位的二进制数所能表示的数字范围为-2^ 15~ 2^15-1,即-32768~ 32767,那么如果我们定义一个short num=32768,你猜打印出来的num值是几呢?答案正是-32768,是不是知道内存溢出计算机是怎么处理的了,对,循环处理。那我如果short num=32767+65535;打印一下看答案是不是32766吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值