C++的数值极限到底在哪???

阶段一:基本整数类型——新手村的舒适区

当我们刚开始学习C++时,老师会告诉我们:"int能表示-2^{31}2^{31}-1,够用了"。确实,对于计数器、小金额计算,int看似游刃有余。但很快就会发现,在真实世界中,这个范围小得可怜

char:8位的小天地

char c = 127;  // 最大正值
c++;  // 恭喜,你触发了undefined behavior!

char的-128到127范围,连ASCII字符都表示不全,更不用说处理中文字符了。在Unicode时代,这简直是石器时代的工具

int:看似很大,其实不大

int population = 8000000000;  // 80亿人口?编译都过不了!

全球人口80亿,已经超出int的正数范围。更不用说金融计算中,随便一个交易额就可能让int原地爆炸

unsigned long long:最后的倔强

unsigned long long max = 18446744073709551615ULL;  // 2^64-1
// 但遇到1e20你就知道什么叫绝望

2^{64}-1看似天文数字,但在科学计算面前就是弟中弟。计算宇宙年龄(约4.3e17秒)还凑合,但遇到大数运算直接GG。

阶段二:浮点数的诱惑与陷阱

当整数不够用时,很多人的第一反应是:"上double!" 这确实能解决范围问题,但会引入新的精度地狱

float:精度杀手

float money = 100.0f;
for (int i = 0; i < 1000; i++) {
    money += 0.1f;
}
// 结果不是200,惊喜吗?

float只有6-7位有效数字,做累加运算就是自寻死路。金融系统用float?等着被财务追杀吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值