c语言问题,验证int类型数据的取值范围,输出的结果和代码不一致,
有几个数超出范围了,为什么结果还是六个数,是程序自动纠错还是什么?那不应该前三个是负值,后三个是正值吗?#include<stdio.h>intmain(){inti;i...
有几个数超出范围了,为什么结果还是六个数,是程序自动纠错还是什么?那不应该前三个是负值,后三个是正值吗?
#include<stdio.h>
int main()
{
int i;
i = -(1<<31);
printf("i=%d\n",i);
i = -(1<<31) - 1;
printf("i=%d\n",i);
i = -(1 << 31) + 1;
printf("i=%d\n", i);
i = (1<<31);
printf("i=%d\n",i);
i = (1 << 31) - 1;
printf("i=%d\n",i);
i = (1 << 31) + 1;
printf("i=%d\n", i);
return 0;
}
结果:
i=-2147483648
i=2147483647
i=-2147483647
i=-2147483648
i=2147483647
i=-2147483647
请按任意键继续. . . 展开
#include<stdio.h>
int main()
{
int i;
i = -(1<<31);
printf("i=%d\n",i);
i = -(1<<31) - 1;
printf("i=%d\n",i);
i = -(1 << 31) + 1;
printf("i=%d\n", i);
i = (1<<31);
printf("i=%d\n",i);
i = (1 << 31) - 1;
printf("i=%d\n",i);
i = (1 << 31) + 1;
printf("i=%d\n", i);
return 0;
}
结果:
i=-2147483648
i=2147483647
i=-2147483647
i=-2147483648
i=2147483647
i=-2147483647
请按任意键继续. . . 展开
展开全部
C语言的int类型与开发环境平台有关,可能是16位(2^16),也可能是32位(2^32),估计现在大多数开发环境都是用32位的,所以范围远远超出65535,可达到4294967296,
unsigned int 0~4294967295
int -2147483648~2147483647
unsigned long 0~4294967295
long -2147483648~2147483647
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
unsigned int 0~4294967295
int -2147483648~2147483647
unsigned long 0~4294967295
long -2147483648~2147483647
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
追问
问题是输出的结果和按代码计算的不一样,比如按代码,第二个输出的i应该是-2147483649,但是结果输出的确实2147483647,第四个输出的i应该是2147483648,但结果确实-2147483648,这是怎么回事?
追答
溢出了啊,int -2147483648~2147483647这是范围
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询