按位运算的隐式类型转换
Implicit type conversion for bitwise operation
我有这个操作:
uint32_t DIM = // ...
int32_t x = // ...
// Operation:
x & (DIM-1u)
语句x & (DIM-1u)
中的隐式类型转换是如何工作的?
- 是否将
x
转换为 uint32_t
?
- 或
(DIM-1u)
到int32_t
?
- 此外,结果类型是什么?是
uint32_t
还是int32_t
两种情况,注意 1u
是 unsigned
类型的文字:
unsigned
在16位到31位的范围内。 DIM - 1u
的类型是uint32_t
,整个表达式是uint32_t
。这是因为另一个参数是 unsigned
类型的二进制表达式中的 signed
类型隐式转换为 unsigned
.
unsigned
为 32 位或更大。那么DIM - 1u
的类型就是unsigned
,整个表达式的类型也是一样的。
最后,请注意 C++ 标准允许 unsigned
和 std::uint32_t
是同一类型;即
std::cout << std::is_same<std::uint32_t, unsigned>::value;
允许为1。
我有这个操作:
uint32_t DIM = // ...
int32_t x = // ...
// Operation:
x & (DIM-1u)
语句x & (DIM-1u)
中的隐式类型转换是如何工作的?
- 是否将
x
转换为uint32_t
? - 或
(DIM-1u)
到int32_t
? - 此外,结果类型是什么?是
uint32_t
还是int32_t
两种情况,注意 1u
是 unsigned
类型的文字:
unsigned
在16位到31位的范围内。DIM - 1u
的类型是uint32_t
,整个表达式是uint32_t
。这是因为另一个参数是unsigned
类型的二进制表达式中的signed
类型隐式转换为unsigned
.unsigned
为 32 位或更大。那么DIM - 1u
的类型就是unsigned
,整个表达式的类型也是一样的。
最后,请注意 C++ 标准允许 unsigned
和 std::uint32_t
是同一类型;即
std::cout << std::is_same<std::uint32_t, unsigned>::value;
允许为1。