此问题在此处已有答案:
Why is unsigned short (multiply) unsigned short converted to signed int? [duplicate](6个答案)
Implicit type conversion rules in C++ operators(9个回答)
9天前关闭
每当我运行代码时:
signed short ssh{-3};
unsigned short ussh{1};
std::cout << ussh + ssh << '\n'; // should be (65535-2+1) = 65534
字符串
我得到的输出是-2
而不是65534,而同样的回绕功能可以很好地处理unsigned long和unsigned int。
unsigned short是否禁止执行wrap around,或者只是提升为int??
2条答案
按热度按时间bis0qfac1#
整数提升的规则在C++中非常清楚,两个值都将被提升为一个类型,该类型具有一个可以接受值而不进行更改的范围,在您的情况下是
int
。什么都没有。
wj8zmpe12#
默认情况下,算术运算的结果将被提升为结果可以适应的类型。对于按位和整数算术运算,它是一个
int
或最接近的“更大”类型,可以适应结果而不改变它的值。请考虑您的代码相当于
字符串
你正在寻找的行为可以用这种或类似的方式表达:
型