首页 > 后端开发 > C++ > 普通算术转换如何确定带符号和无符号操作数的二元'\”运算符的结果类型?

普通算术转换如何确定带符号和无符号操作数的二元'\”运算符的结果类型?

DDD
发布: 2024-12-01 18:15:12
原创
293 人浏览过

How Do Usual Arithmetic Conversions Determine the Result Type of Binary

有符号和无符号二元运算符的提升规则

考虑以下代码片段:

// Snippet 1
int max = std::numeric_limits<int>::max();
unsigned int one = 1;
unsigned int result = max + one;
登录后复制
// Snippet 2
unsigned int us = 42;
int neg = -43;
int result = us + neg;
登录后复制

在这些情况下,考虑到不同的符号符号,“ ”运算符如何确定正确的结果类型操作数?

运算符遵循“通常算术转换”规则,该规则根据操作数类型指示类型转换步骤。根据此规则,如果任一操作数为:

  • long double,则两个操作数都转换为 long double。
  • double,两个操作数都转换为 double。
  • float,两个操作数都转换为 float。
  • unsigned long,另一个操作数转换为 unsigned long.
  • long int 和另一个操作数 unsigned int,如果 unsigned int 的值可以用 long int 表示,则两个操作数都转换为 unsigned long int;否则,两者都转换为 long。
  • long,另一个操作数转换为 long。
  • unsigned,另一个操作数转换为 unsigned。

自int 和 unsigned int 在规则中可以互换,选择具有更宽类型(unsigned int)的操作数作为结果type.

这解释了为什么在代码片段 1 中,结果是 unsigned int (2147483648),而在代码片段 2 中,结果是 int (-1)。有符号操作数 (neg) 隐式转换为无符号 int,在后一种情况下会产生未定义的值。

以上是普通算术转换如何确定带符号和无符号操作数的二元'\”运算符的结果类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板