c++ - C和C++中整数计算的溢出

标签 c++ c integer-overflow

<分区>

请检查以下代码段:

  unsigned char a = 100;
  unsigned char b = 100;
  unsigned char c = 100;
  unsigned short x = a * b + c;

我预计这会溢出并且计算将在 8 位类型的 unsigned char 中完成(而不是在 16 位 unsigned short 中),超出 unsigned char 的取值范围。但事实并非如此。

为什么在C和C++中计算不会溢出?

最佳答案

[...] arithmetic operators do not accept types smaller than int as arguments, and integral promotions are automatically applied after lvalue-to-rvalue conversion, if applicable.

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);

关于c++ - C和C++中整数计算的溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49252193/

相关文章:

c++ - 在模板类中重载下标运算符

c - 使用扩展汇编语法在实模式下调用 BIOS 服务存在困难

Java Integer compareTo() - 为什么使用比较与减法?

c# - 强制 PHP 整数溢出

c++ - 在 Linux 上创建原子文件?

c++ - 在我的用户定义的 makefile 中的 makefile 上使用 PETSc

c# - 提升指针后释放 IntPtr 分配的内存

c - 在字符串中的子字符串之后查找多个字符

c - gcc -O 是否会对链接的静态库生效?

java - 为什么Java认为从10到99所有数字的乘积都是0?