美文网首页
C语言判断整数溢出

C语言判断整数溢出

作者: TBeaR | 来源:发表于2018-07-29 00:05 被阅读0次

        本次讨论一个看似简单,其实内藏玄机的一个有意思的问题,即如何判定一个整型变量x是否溢出。

        首先,先复习一下int的范围。int类型在C语言中占4个字节,即32个二进制位。当表示正数时,最高位为符号位(符号位为0),最大的正数是 0111 1111 1111 1111 1111 1111 1111 1111 即2^31 -1 = 2147483647。

        当表示负数时,最高位为符号位(符号位为1),最小的负数是 1000 0000 0000 0000 0000 0000 0000 0000 而在计算机中是以补码的形式存储的,C语言规定 1000 0000 0000 0000 0000 0000 0000 0000 的补码为-2147483648

        所以C语言中int的取值范围为:-2147483648 ~  2147483647。

        有人可能要说,这里if语句不就能解决问题吗?例如:if(x>-2147483648&&x<2147483647)。然而,这里显然二点不妥。(1)你的如何短时间计算出2^ 31?(2)因为x是int型,即使x溢出,由于存储的限制,那么x的值也必然在这个区间范围内(这里不考虑类型升级)。所以这种判定是不科学的。

下面给出我的思路。

        针对(1)如何快速计算2^ 31次方:简单粗暴的用16进制表示出来(),或者利用位运算。将最大值最小值记作int_max 和int_min。

        针对(2)我们可以先比较x/10与int_max/10的大小, 再比较最后一位,即可避免上面的尴尬之处。


代码如下:

相关文章

  • C语言判断整数溢出

    本次讨论一个看似简单,其实内藏玄机的一个有意思的问题,即如何判定一个整型变量x是否溢出。 首先,先...

  • 7. Reverse Integer

    algorithm 判断整数乘法会不会溢出:

  • Java判断整数溢出

    开题报告第一版写完发给老师了,熬了两周终于搞出来了,等着被怼了之后再改吧。晚上选了Leetcode一道简单的题,整...

  • 判断整型运算是否溢出

    加法溢出: 无符号整数溢出判断较简单 有符号整数溢出的时候只存在正溢出和负溢出两种情况,即两正数相加得到一个负数或...

  • C语言笔记02_简单算法

    C语言 笔记02 本文涉及《啊哈C》第三章1~7节的内容 1.大于小于等于2.判断正数如果现在需要判断一个整数是否...

  • ipv4转整数

    IP与整数互转,C语言实现 IP 与整数互转,JAVA语言实现

  • 缓冲区溢出:栈溢出、格式化字符串和堆溢出

    一、栈溢出 1、定义 栈溢出:在C语言中,栈溢出是由于C语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓...

  • python 的 inf 和 nan

    问题起源于我想判断一个数大于最小的负整数,结果发现不知道如何表示这个最小的负整数。C 语言中表示最大的正整数值是 ...

  • C语言4 -C语言整数和浮点数

    C语言4 -C语言整数和浮点数 C语言数据类型 基本类型 整数类型 特别说明:int 在16位计算机中与short...

  • 整数溢出

    1.无符号整数达到最大值时将溢出到起始点。2.c标准没有定义有符号类型的溢出规则。

网友评论

      本文标题:C语言判断整数溢出

      本文链接:https://www.haomeiwen.com/subject/oioemftx.html