为什么一元运算符返回与其操作数不同的类型?

问题描述 投票:1回答:1

似乎uint16_t和uint8_t上的一元按位非运算符(〜)似乎返回int,而不是其操作数的类型(与一元-相同)。有人可以给出原因吗?

令人惊讶的是〜uint16_t(0)

我使用g ++版本9.2.1 20191008(Ubuntu 9.2.1-9ubuntu2)x86_64-linux-gnu

c++ return-type unsigned unary-operator
1个回答
0
投票

从C ++ 11Standard5.3.1.8:

一元运算符的操作数应为算术或无作用域的枚举类型,结果为其操作数的取反。积分提升是对整数或枚举操作数执行的。无符号数量的负数是通过从2 ^ n中减去其值来计算的,其中n是提升操作数中的位数。结果的类型就是提升的操作数的类型。

因此,它表明一元运算符对整数进行提升。

© www.soinside.com 2019 - 2024. All rights reserved.