读书人

32767+1怎样才能变成32758?该如何解决

发布时间: 2012-03-04 11:13:34 作者: rapoo

32767+1怎样才能变成32758??
main()
{
int a;
long b;
a=32767;
b=a+1;
printf( "b=%ld ",b);
}
b为什么是-32768
我知道进制问题,但是怎样才能为32768呢~

[解决办法]
恩 显然是16位的环境。

这样的话, b=a+1;
计算时候, a 为int, 1 也是, 那么 a+1 也是 int, 这个时候就数据溢出了,成了-32768
然后赋值给b, 结果自然是 -32768

解决办法就是修正中间类型也是 long 就可以了
[解决办法]
把b=a+1;
改成 b=(long)a+1; 或者b=a+1L;
[解决办法]
假如题目是 32767+1怎样才能变成32768
或许可以这样
b=a+1;
b=32768-32768+a+1;
[解决办法]
因为int的范围就这么定死了,看帮助吧,例如 c#的int(有符号 32 位整数)的范围是:
-2,147,483,648 到 2,147,483,647,就像一个圆一样,大于或小于就转圈吧,大多少倍就转多少圈吧。

读书人网 >C语言

热点推荐