C语言学习日记(8)——整数溢出

小时候喜欢玩电子计算器,觉得很神奇,想要算什么数,立刻就能算出来。当时看着计算器的液晶屏幕就想,如果算一个很大的数,超过了屏幕上面数字的位数,会怎么样呢?试了以后结果是INF,那就是无穷大了。虽然当时还小,但好像也知道那是电子计算器位数不足,从此觉得计算机虽然神奇,但计算能力也是有限的。

同样,计算机虽然计算能力强大,但计算能力也受位数的限制,并不是无穷的。以int类型为例,当我们定义一个int类型变量时,它的位数为32位,4个字节。

int n;//定义了一个整型变量,占4个字节

在C语言中,整型变量分为带符号和不带符号两种。int其实是signed int的简写,也就是带符号的。它保存的整数是有上下限的,最大为2147483647(21亿多),最小为-2147483648。

如果计算结果超出了int类型变量的上下限,会怎么样呢?我们来定义一个整型变量,并且将它初始化为最大值,然后再加1,看看会发生什么现象?

int n = 2147483647;//定义一个整型变量,并初始化为最大值
n++;   //n现在是多少呢?

答案是-2147483648。很奇怪啊,一个正数加1竟然变成了负数。再仔细看看,这个负数就是int类型的最小值,也就是说在int类型的最大值上加1,就变到了最小值。所以老祖宗说物极必反嘛。

怎么理解呢?由于i

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值