鱼C论坛

 找回密码
 立即注册
查看: 1809|回复: 2

[已解决]int类型占多少个字节? 这个代码我不太明白..求解??

[复制链接]
发表于 2021-1-7 22:30:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>

int main()
{
        int a;
        printf("输入:");
        scanf("%d",&a);  //这里输入11个数字会异常....输入10和10个一下不会出现输出异常;
        printf("a=%d",a);
        return 0;
}
这里是输入10个数字不会出现异常.....
输入:1122334455
a=1122334455
--------------------------------
Process exited after 4.996 seconds with return value 0
请按任意键继续. . .

这是输入11个数字出现异常数据....a=负数的情况....想知道为什么会出现这种情况????
输入:11223344556
a=-1661557332
--------------------------------
Process exited after 7.403 seconds with return value 0
请按任意键继续. . .







最佳答案
2021-1-7 22:39:43
本帖最后由 昨非 于 2021-1-7 22:45 编辑

int占四个字节,一个字节8位(8bit)也就是32bit
它的取值为:-2^31 ~ 2^31-1
也就是:-2,147,483,648 到 +2,147,483,647

你第一次的输入值属于这个范围,所以没有出现异常
第二次输入值超出这个范围,造成了溢出
溢出的解释可以简单理解为:
输入大于2,147,483,647的部分,会从-2,147,483,648继续往前数,超出正向最大值,回到最小值,相当于一个循环
直到数完11223344556后,落到哪里,你输出的数就是几
也就是说,把你输入的超出范围的数强行变化到这个范围(-2^31 ~ 2^31-1)内,难免会出现负数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-7 22:39:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 昨非 于 2021-1-7 22:45 编辑

int占四个字节,一个字节8位(8bit)也就是32bit
它的取值为:-2^31 ~ 2^31-1
也就是:-2,147,483,648 到 +2,147,483,647

你第一次的输入值属于这个范围,所以没有出现异常
第二次输入值超出这个范围,造成了溢出
溢出的解释可以简单理解为:
输入大于2,147,483,647的部分,会从-2,147,483,648继续往前数,超出正向最大值,回到最小值,相当于一个循环
直到数完11223344556后,落到哪里,你输出的数就是几
也就是说,把你输入的超出范围的数强行变化到这个范围(-2^31 ~ 2^31-1)内,难免会出现负数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-7 22:40:14 | 显示全部楼层
        正整数的有效数值范围是 : 0 ~ 2147483647,所以,当你输入一个 10 数 11223344556 的时候,尚属于一个正常的正整数,当输入 11 位数的时候,其数值显然已经超出了正整数的有效数值范围,而介入负整数的编码区域,所以,显示出来的时候,就是一个负值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 11:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表