C语言整型的上溢,下溢是指什么?

csoma 2012-09-07 12:30:16
给个实例。
...全文
754 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jft56578 2012-09-07
  • 打赏
  • 举报
回复
所谓上溢就是超过整形所能表示的最大数据,同理下溢出呢,就是小于最小的那个。
northcan 2012-09-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

以32位的int为例
int范围是-2147483648至2147483647

上溢:
int num1 = 2147483647;
num1++;


下溢:
int num2 = -2147483648;
num1--;
[/Quote]

就是这个情况
赵4老师 2012-09-07
  • 打赏
  • 举报
回复
//有符号整形a和b,如何判断a+b是否溢出
#include <stdio.h>
int ifo_add(int a,int b) {
__asm {
mov eax,a
add eax,b
jo overflowed
xor eax,eax
jmp no_overflowed
overflowed:
mov eax,1
no_overflowed:
}
}
int main() {
int a,b;

a= 1;b= 2;printf("%11d+(%2d) %d\n",a,b,ifo_add(a,b));
a= -1;b=-2;printf("%11d+(%2d) %d\n",a,b,ifo_add(a,b));
a= 2147483647;b= 1;printf("%11d+(%2d) %d\n",a,b,ifo_add(a,b));
a=-2147483647;b=-1;printf("%11d+(%2d) %d\n",a,b,ifo_add(a,b));
a=-2147483647;b=-2;printf("%11d+(%2d) %d\n",a,b,ifo_add(a,b));
}
// 1+( 2) 0
// -1+(-2) 0
// 2147483647+( 1) 1
//-2147483647+(-1) 0
//-2147483647+(-2) 1
zhouganghao 2012-09-07
  • 打赏
  • 举报
回复
+++++++++++++[Quote=引用 1 楼 的回复:]

以32位的int为例
int范围是-2147483648至2147483647

上溢:
int num1 = 2147483647;
num1++;


下溢:
int num2 = -2147483648;
num1--;
[/Quote]
qq120848369 2012-09-07
  • 打赏
  • 举报
回复
你自己手算一下就知道了,举个例子:

我有一个数,是4bits长度的,无符号,最大是0xf,也就是1111.

1111 + 1 = 10000, 只能存下4bits,所以就是0000. 这不就是从最大的溢出到最小了吗?
AndyZhang 2012-09-07
  • 打赏
  • 举报
回复
就是超出了表示范围。比如字节数为n,整形范围[-2^n,2^n - 1]超出了,就会溢出。
matrixcl 2012-09-07
  • 打赏
  • 举报
回复
以32位的int为例
int范围是-2147483648至2147483647

上溢:
int num1 = 2147483647;
num1++;


下溢:
int num2 = -2147483648;
num1--;

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧