整数溢出机制 C

简介: 整数溢出机制 C

前言

这是在写一道关于需要处理整数溢出的运算的题时学到的概念,一般对于long long都承载不了的数我们一般用大整数都能解决,但是对于只是判断整数是否溢出时了解整数溢出的机制有时候能够事半功倍。


一、无符号整型溢出

对于unsigned整型溢出,C标准在这一方面是有定义的:“溢出后的数会以2^(8*sizeof(type))作模运算”,如果一个unsigned char溢出了,需要把溢出的值与256求模

二、有符号整型溢出

对于signed整型的溢出,C的规范定义是“undefined behavior”,虽然没有定义,各编译器可自己实现,大部分的溢出机制还是一样的。

有符号整型溢出可以分为向上溢出和向下溢出。假设用k个字节表示一个整型变量, 那么这个变量可以表示的有符号整数的范围是-2^(8k-1) ~ 2^(8k-1) – 1,两个正整数或者两个负整数相加就有可能超过这个整型变量所能表示的范围, 向上超出>2^(8k-1) – 1称之为向上溢出, 向下超出<-2^(8k-1) 我们称之为向下溢出

先说对于所有溢出情况的结论,当溢出时(以signed char举例),我们会取结果的低八位,并对其表示的符号位判断该数字的正负

对于两数之和是否溢出的判断,这时候我们就可以得出:两个正数相加后溢出结果将 <0,两个负数相加后溢出结果将>=0

相关文章
溢出行为
在 Julia 中,超出类型最大值的计算会导致环绕行为,如 `typemax(Int64)` 加 1 结果变为 `typemin(Int64)`,显示了模算术特性。为了避免溢出错误,需检查边界或使用 BigInt 进行任意精度运算。例如,`10^19` 溢出,而 `big(10)^19` 则正确计算为 `10000000000000000000`。
|
8月前
|
存储 算法
【三种方法】求一个整数存储在内存中二进制中的1的个数附两道课外练习题
【三种方法】求一个整数存储在内存中二进制中的1的个数附两道课外练习题
62 0
|
8月前
|
C语言
C语言中通过INT_MAX判断两个非负整数相加是否溢出
C语言中通过INT_MAX判断两个非负整数相加是否溢出
175 0
|
8月前
|
存储 C语言
C语言训练:三个字符串比较大小,实现两个整数数的交换统计二进制中1的个数
C语言训练:三个字符串比较大小,实现两个整数数的交换统计二进制中1的个数
|
存储 人工智能 C语言
整型在内存中的存储,整型最大值最小值的推导,以及大小端的介绍
整型在内存中的存储,整型最大值最小值的推导,以及大小端的介绍
|
C++
C++ 各种无符号整型能够在溢出之前计算出斐波那契数列的最大项数是几?答案是24、47、93
C++ 各种无符号整型能够在溢出之前计算出斐波那契数列的最大项数是几?答案是24、47、93
86 0
2.2.4加减运算和溢出判断
2.2.4加减运算和溢出判断
|
存储
用补码计算x+y,并判断结果是否溢出问题
浮点数的加减法与是否溢出的判断,是计算机组成原理中的数据存储的一个入门。至于溢出情况,如果01就是正溢出,00,11未溢出,10负溢出。
805 0
用补码计算x+y,并判断结果是否溢出问题
代码例题(1-3)(含进阶版)及讲解:1.求两个数二进制中不同位的个数 2.打印整数的二进制的奇数和偶数位 3.交换两个变量,不创建临时变量 (ps最后一道为已知代码求值题)
代码例题(1-3)(含进阶版)及讲解:1.求两个数二进制中不同位的个数 2.打印整数的二进制的奇数和偶数位 3.交换两个变量,不创建临时变量 (ps最后一道为已知代码求值题)
100 0
获取连续集合中错误的整数
获取连续集合中错误的整数(算法题)

热门文章

最新文章

下一篇
开通oss服务