C 和 C++ 中的整数计算溢出
Overflow of integer calculation in C and C++
请检查以下代码片段:
unsigned char a = 100;
unsigned char b = 100;
unsigned char c = 100;
unsigned short x = a * b + c;
我预计这会溢出,计算将以 8 位类型的无符号字符(而不是 16 位无符号短字符(完成,超出无符号字符的值范围。但事实并非如此。
为什么计算在 C 和 C++ 中不会溢出?
[...]算术运算符不接受小于int的类型作为参数,如果适用,则在左值到右值转换后自动应用积分提升。
http://en.cppreference.com/w/cpp/language/implicit_conversion#Integral_promotion
所以你的代码是这样的:
unsigned char a = (unsigned char)100;
unsigned char b = (unsigned char)100;
unsigned char c = (unsigned char)100;
unsigned short x = (unsigned short)((int)a * (int)b + (int)c);
相关文章:
- 如何计算整数的十进制数字?
- 计算总和为 x 的所有整数子集(包括负数)
- 如何计算整数链中使用了多少次数字?
- 计算负基数的正非整数幂
- 通过在带有 C++ 的列表中添加连续元素来计算新的整数列表
- 我在c++中遇到了一个奇怪的错误,其中一个计算2个小整数加法的语句溢出到一个长值中
- 计算将整数n分解为4平方和的方法的数量
- 如何计算数组整数的总可能组合
- 当我们C++将两个数组的整数除以 时,如何获得浮点数计算;
- 计算 (64 位无符号整数) * (64 位无符号整数) 的商除以 2^64
- 为什么按位运算符在使用与整数中提供的位数相同的位数计算可能的最大范围时会产生错误
- 如何使用 C++ std 计算整数集合的前导零和尾随零
- 运算符"|"如何计算两个整数?
- 如何计算两个负整数 c++ 之间的总和
- 从文本文件中读取并使用 sizeof 结果计算整数的数量到 nan
- C 和 C++ 中的整数计算溢出
- 仅使用整数计算两条线的交点
- 一种在C++中执行基本 128 位整数计算的有效方法
- 算法C/C++:用n和d 32或64位整数计算(2^n)%d的最快方法
- 整数计算的二项式系数使用boost::math::binomial_coefficient,返回值为boost::mul