栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】C语言常见整数类型的大小/取值范围/整数溢出

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】C语言常见整数类型的大小/取值范围/整数溢出

文章目录
  • 前言
  • 一、常见各整数类型的字节数和取值范围
    • 1. 以64位编译器为例
  • 二、整数溢出
  • 总结


前言

某天晚上突然室友问我,鹏哥,整数溢出了会咋样?我恰好也不知道,就说会崩溃。但到底会怎么样呢?本人决定亲自试验一番


一、常见各整数类型的字节数和取值范围 1. 以64位编译器为例

代码如下(示例):

#include
#include//limits.h专门用于检测整型数据数据类型的表达值范围。
int main()
{
	printf("short的字节数:%zdn", sizeof(short));
	printf("short的范围:%d-----%dn", SHRT_MIN, SHRT_MAX);

	printf("nunsigned short的字节数:%zdn", sizeof(unsigned short));
	printf("unsigned short的范围:%u-----%un", 0, USHRT_MAX);

	printf("nint的字节数:%zdn", sizeof(int));
	printf("int的范围:%d-----%dn", INT_MIN, INT_MAX);

	printf("nunsigned int的字节数:%zdn", sizeof(unsigned int));
	printf("unsigned int的范围: % u---- - % un", 0, UINT_MAX);

	printf("nlong的字节数:%zdn", sizeof(long));
	printf("long的范围: % ld---- - % ldn", LONG_MIN,LONG_MAX);

	printf("nunsigned long的字节数:%zdn", sizeof(unsigned long));
	printf("unsigned long的范围: % ld---- - % ldn",0, ULONG_MAX);

	printf("nlong long 的字节数:%zdn", sizeof(long long));
	printf("long long的范围: % lld---- - % lldn", LLONG_MIN, LLONG_MAX);

	return 0;
}

结果如下:

注意: 在C语言中只规定了short占用的储存空间不能多于int,long占用的储存空间不能少于int。所以以上可看到,在64位操作机下int和long均为4个字节。

二、整数溢出

如果整数超出了相应类型的取值范围会怎么样呢?

int main()
{
	int i = 2147483647;
	unsigned int j = 4294967295;

	printf("%d %d %dn", i, i + 1, i + 2);
	printf("%u %u %un", j, j + 1, j + 2);
	// printf()函数使用%u说明显示unsigned int类型的值
	return 0;
}

结果如下:
2147483647 -2147483648 -2147483647
4294967295 0 1


总结

对于整数溢出的问题,其实系统并未报错。无符号整型unsigned int 的溢出相当于秒针到最大值时,j 重新从起始点0出发。而有符号整型int类型的变量i则从-2147483648开始。

注意: 溢出行为是C语言未定义的行为,以上为vs 2022在64位情况下的实验。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/965471.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号