如何判断有符号数的溢出

在C语言中,由于无符号数不存在溢出一说,所以溢出都是对有符号数来说的。

如果你想利用 if( a + b < 0 ) 语句来判断溢出的话,那么他就会存在局限性,因为每种编译器的实现不同。

判断是否溢出的方法之一就是都转化为无符号数,然后判断其与C语言中最大值的大小。

一种方法如下:

if ( (unsigned)a + (unsigned)b > INT_MAX )
    //报错

其中,INT_MAX是C语言中自带的一个常量,在头文件<limits.h>中。


另外一种方法如下:

if( a > INT_MAX - b)
    //报错

这个跟上面的其实差不多,只是没有利用转化来比较。


可能很多人会认为为什么我在写代码的时候会出现溢出呢,或者有很多考试或者编程中出现了溢出呢?

在这里,需要大家知道的就是C语言中,当你定义了int的时候,默认的是signed类型的,所以会出现这种情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值