本次讨论一个看似简单,其实内藏玄机的一个有意思的问题,即如何判定一个整型变量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语言 int 溢出,C语言判断整数溢出相关推荐

  1. 整数溢出,如何判断整数溢出

    c语言中存在两类整数算术运算,有符号运算和无符号运算.在无符号运算里,没有了符号位,所以是没有溢出的概念的. 所有的无符号运算都是以2的n次方为模.如果算术运算符的一个操作数是有符号书,另一个是无符号 ...

  2. 语言余一个负数_C语言学习日记(8)——整数溢出

    小时候喜欢玩电子计算器,觉得很神奇,想要算什么数,立刻就能算出来.当时看着计算器的液晶屏幕就想,如果算一个很大的数,超过了屏幕上面数字的位数,会怎么样呢?试了以后结果是INF,那就是无穷大了.虽然当时 ...

  3. Java如何判断整数溢出,溢出后怎么得到提示?

    作者:Aaron_涛 blog.csdn.net/qq_33330687/article/details/81626157 问题 在之前刷题的时候遇见一个问题,需要解决int相加后怎么判断是否溢出,如 ...

  4. c语言int val,c语言不定参数与printf函数的实现

    今天学习了C语言不定参数,C语言中的不定参数主要靠这个头文件实现,这个头文件包含了va_list().va_start().va_end()三个宏,其用法为先声明一个va_list类型的变量,它用于访 ...

  5. c语言 int转char_c语言的函数指针

    简单定义并间接调用 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<time.h> void singas ...

  6. c 语言 int argc,C语言深度学习之int main(int argc,char **argv)的理解及延申

    C语言深度学习之int main(int argc,char **argv)的理解及延申 前者为可接受 命令行参数,argc表示参数个数, argv[]是参数数组,其中第0个参数是程序本身的名称(包含 ...

  7. c语言 int max,C语言 0x7fffffff是多少(也就是INT_MAX,首位是 0,其余都是1,f代表1111)...

    可以算一下 0x7FFFFFFF 是多少 每个十六进制数4bit,因此8位16进制是4个字节,刚好是一个int整型 F的二进制码为 1111 7的二进制码为 0111 这样一来,整个整数 0x7FFF ...

  8. BUUCTF-pwn2_sctf_2016(整数溢出+泄露libc)

    32位开启了nx保护 没有看到system和'/bin/sh',开启了NX保护,是泄露libc类型的题目 main函数就调用了一个vuln函数 7行的输入函数不是get,是程序自定义的函数get_n ...

  9. 一种被忽视的构造和整数溢出重现

    Michael Howard Secure Windows Initiative 摘要:Michael Howard 研究了一种常常被忽略的代码构造,这种构造可能会导致严重的缓冲区溢出问题,然后介绍了 ...

  10. 软件安全实验——pre6(整数溢出、堆溢出、栈溢出漏洞预习)

    这里写目录标题 一级目录 1.阅读Basic Integer Overflows 这篇文章,大概描述整数溢出的原因和危害. 2.阅读堆溢出的文章Once upon a free()... 3.(一定要 ...

最新文章

  1. matlab mod()rem()
  2. 复旦大学计算机科学院夏令营,2020年复旦大学计算机科学技术学院夏令营接收推免生条件...
  3. Promise实战AJAX封装
  4. could not stop cortex-m device 问题
  5. NOR Flash擦写和原理分析 (二)
  6. 素数(质数)与合数的研究
  7. java 运行 依赖_java – 运行时中的依赖项确定
  8. springboot(运行原理参考借鉴)
  9. NB50/60 TJ1/TK1 模具 黑苹果保姆级教程整理
  10. js获取客户端ip地址
  11. 三十四、Expandable grid 可扩展的表格
  12. localhost:8080
  13. 自制RS232转485通信模块
  14. 5G端到端时延要求1ms是个什么概念?
  15. 使用dubbo遇到了Unsatisfied dependency expressed through field ‘userService‘
  16. c语言修仙亲吻片段,《C语言修仙》by一十四洲,摘抄
  17. Selenium-针对alert弹窗无法获取,弹出no such alert的解决方法
  18. c语言 release函数报错,91-100
  19. 极坐标解圆锥曲线三角形面积范围问题
  20. 液晶显示器偏光膜的基本原理

热门文章

  1. 第四百九十五日:念念不忘,必有回响
  2. r中gglot怎么组合多张图_怎样组合多张ggplot2图片
  3. Latch的产生和避免
  4. 一些基于 D3.js 的图表库
  5. 错误记录:FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecate
  6. 面试的反杀-你有没有想要问我的
  7. 二十一世纪大学英语读写教程(第三册)学习笔记(原文)——10 - Plain Talk About Handling Stress(浅谈如何缓解压力)
  8. 【记录】PR|一些使用技巧记录
  9. [LOJ6198]谢特
  10. java tld tag_自定义标签tag(jsp编写)和tld(java编写)的使用方法