似乎uint16_t和uint8_t上的一元按位非运算符(〜)似乎返回int,而不是其操作数的类型(与一元-相同)。有人可以给出原因吗?
令人惊讶的是〜uint16_t(0) 我使用g ++版本9.2.1 20191008(Ubuntu 9.2.1-9ubuntu2)x86_64-linux-gnu
从C ++ 11Standard5.3.1.8:
一元运算符的操作数应为算术或无作用域的枚举类型,结果为其操作数的取反。积分提升是对整数或枚举操作数执行的。无符号数量的负数是通过从2 ^ n中减去其值来计算的,其中n是提升操作数中的位数。结果的类型就是提升的操作数的类型。
因此,它表明一元运算符对整数进行提升。