C语言数据溢出问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 09:29:08
#include<stdio.h>
void main()
{ int a, b;
unsigned c,d;
long e,f;
a=100;
b= -100;
e=50000;
f=32767;
c=a;
d=b;
printf(“%d,%d\n”,a,b);
printf(“%u,%u\n”,a,b);
printf(“%u,%u\n”,c,d);
c=a=e;
d=b=f;
printf(“%d,%d\n”,a,b);
printf(“%u,%u\n”,c,d);
}
signed的范围是-32768到32767,那倒数第三行输出50000是怎么加减变成-15536的?

在C语言中,数据的存储就像一个圆圈,正数溢出数据就会从最小负数开始,负数溢出数据同理,打个比方(简略写一下):
int a=32768,b=-32769;
printf("a=%d,b=%d",&a,&b);
则会输出a=-32768,b=32767;
这样则50000输出就是(50000-32767)+(-32768)+(-1)=-15536

老实说没看到你说的-15536.。

是倒数第三行还是倒数第二行啊!a=-15536吧!你是用tc做还是c++啊!如果是c++的话,那a=50000.如果是Tc的话,那就是-15536.具体是怎么做的,那你就的要找老师或是C语言好的人啊!因为网上不好讲啊!

你的50000都在过32767了!怎么会不溢出吖!