按位运算的隐式类型转换

Implicit type conversion for bitwise operation

我有这个操作:

uint32_t DIM = // ...
int32_t x = // ...

// Operation:
x & (DIM-1u)

语句x & (DIM-1u)中的隐式类型转换是如何工作的?

两种情况,注意 1uunsigned 类型的文字:

  1. unsigned在16位到31位的范围内。 DIM - 1u的类型是uint32_t,整个表达式是uint32_t。这是因为另一个参数是 unsigned 类型的二进制表达式中的 signed 类型隐式转换为 unsigned.

  2. unsigned 为 32 位或更大。那么DIM - 1u的类型就是unsigned,整个表达式的类型也是一样的。


最后,请注意 C++ 标准允许 unsignedstd::uint32_t 是同一类型;即

std::cout << std::is_same<std::uint32_t, unsigned>::value;

允许为1。