【发布时间】:2016-01-04 11:09:37
【问题描述】:
我在搞乱数组并注意到了这一点。例如:
int32_t array[];
int16_t value = -4000;
当我尝试将值写入 int32 数组值的上半部分和下半部分时,
array[0] = (value << 16) | value;
编译器会先将值转换为 32 位值,然后再进行位移和按位 OR。因此,不是将 16 位 -4000 写入上半部和下半部,而是顶部值将是 -1,底部值将是 -4000。
有没有办法在 -4000 的 16 位值中进行或运算,所以两半都是 -4000?这不是一个真正的大问题。我只是想知道它是否可以完成。
【问题讨论】:
-
编译器没有“转换”值;它转换了它。强制转换是您在源代码中编写的内容,用于告诉编译器进行转换。这称为显式转换。编译器还可以进行一些转换而无需强制转换。这称为隐式转换。
标签: c++ c bit-manipulation integer-promotion