【发布时间】:2020-03-08 12:27:40
【问题描述】:
看起来好像 uint16_t 和 uint8_t 上的一元按位非运算符 (~) 返回 int, 而不是其操作数的类型(一元 - 相同)。 有人可以说明为什么会这样吗?
令人惊讶的是 ~uint16_t(0)
我使用 g++ 版本 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2) x86_64-linux-gnu
【问题讨论】:
-
因为“通常的提升”总是在所有操作数上执行。 ~ 运算符仅适用于 int、long、long long、unsigned、unsigned long 和 unsigned long long 类型的操作数。其他一切都需要转换。
标签: c++ return-type unsigned unary-operator