#include <stdio.h> void main() { int a,b; a=32767; b=a+1; printf("%d,%d\n",a,b); } 运行这个程序后

输出结果是32768,为什么不是-32768呢?

#include<stdio.h>
int main()
{
short a,b;
a=32767;
b=a+1;
printf("%d,%d\n",a,b);
return 0;
}
这样就会变成-32768了,int 能表示的范围就是2的32次方,short才是32767
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-24
有可能会是32768,-32768也是有可能的。整型的取值范围是-32768~ 32767,所以如果你把a,b都定义为普通整型变量,b的输出结果就会发生溢出,就会产生一个不可预知的结果。。。也有可能跟你的所用的编译软件有关。
第2个回答  2011-08-23
你看一下你用的编辑器int 是几个字节呀!!!!!
第3个回答  2011-08-23
因为加一没有溢出?

...void main() { int a,b; a=32767; b=a+1; printf("%d,%d\\n",a,b...
include<stdio.h> int main(){ short a,b;a=32767;b=a+1;printf("%d,%d\\n",a,b);return 0;} 这样就会变成-32768了,int 能表示的范围就是2的32次方,short才是32767

...main() { short a,b; a=32767; b=a+1; printf("%...
原理:没什么很深奥的原理,就是简单的定义赋值

整形数据的溢出
include <stdio.h> void main(){ long a,b;a=32767;b=a+1;printf("%ld,%ld\\n",a,b);}

c语言怎么将变量b改成long型?
include<stdio.h> int main(){ int a,b;a=32767;b=a+1;printf("%d,%ld\\n",a,(long)b);\/*输出的第二项为强制转换类型函数的返回值*\/ return 0;}

#include <stdio.h> main() { short a,b,c; int d; a=32767; b=a+1...
两个的原因都是数据溢出 short在32位系统中占2字节长度,也就是有16位。只能表达-32768~32767共计65536个数字。32767(D) = 0111 1111(B),加上1后为1000 0000(B),由于是有符号数据,所以第一位只表示符号,根据补码规则,数据为-32768 int在32位系统中占4字节长度,也就是有32位。可以...

c语言类问题 为什么运行出来-107374176
如果计算过程当中,数值超过32767,由于补码的关系。结果就有可能是负数。这种情况,就需要使用取值范围更大的数据类型。 例程:include<stdio.h> void main(){ int a,b,ch; a=32767; b=a+1; printf("a=%d,b=%d",a,b); ch=getch(); } \/\/输出结果:a=32767...

#include<stdio.h>main(){unsigned short a=65536;int b;printf("%d...
我来给你解释一下:include<stdio.h> main(){ unsigned short a=65536;%这个就是无符号短整型变量 int b;printf("%d\\n",b=a) ;%把一个无符号变量赋给一个有符号的变量。运算后的结果为0 } 为什么结果为零呢?其实很简单:是这样的:有符号变量的取值范围为-32678~32767,无符号变量的取值...

...32767,求a\/b的值.要求精确到小数点后n位,其中1<n<200.
这个显然是高精度的问题,直接用系统的double是不能达到200位的精度的,所以只能手动模拟计算除法。程序如下:#include <stdio.h> int main(){ int i, a, b, n, s;char result[201] = {0};scanf("%d %d %d", &a, &b, &n);s = a \/ b;a = a % b;for( i = 0; i < n;...

输入两个自然数,输出他们的和
include <stdio.h> void main(){ int a,b; scanf("%d %d",&a,&b); printf("%d\\n",a+b);}

编写一个程序,计算-32768~32767之间任意整数中各位奇数的平方和_百度...
第三次取模 b=a%10=3 取百位 a=a\/10=12 *\/ #include<stdio.h> main() { int a,b,sum=0,pingfang; \/\/a表示我们输入的数字,b表示每一次取的位数, \/\/sum表示平方和,pingfang表示位数为奇数的数字的平方 scanf("%d",&a); \/\/输入一个规定范围内的整数 ...

相似回答