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
请按任意键继续. . .
展开
 我来答
leosky07
2017-03-09 · TA获得超过339个赞
知道小有建树答主
回答量:169
采纳率:0%
帮助的人:100万
展开全部
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
追问
问题是输出的结果和按代码计算的不一样,比如按代码,第二个输出的i应该是-2147483649,但是结果输出的确实2147483647,第四个输出的i应该是2147483648,但结果确实-2147483648,这是怎么回事?
追答
溢出了啊,int -2147483648~2147483647这是范围
syht2000
高粉答主

2017-03-09 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
你这数据都已经溢出了,-2147483648就是64位的int的最小值了,溢出后符号位也会受到影响,加减时是以补码进行运算的,具体的值你可以算一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式