【发布时间】:2020-09-01 00:11:45
【问题描述】:
当对小于int 的算术类型执行按位运算时,它会自动提升为int。
std::uint8_t a = 42;
auto b = a | 0x0f;
// b will be of type int
我无法确定这次促销期间究竟发生了什么,特别是因为它正在从无符号整数转换为有符号整数。 a 的数值是否会保持一致,可能会改变二进制表示?或者二进制表示会保持一致,可能会导致不同的数值?
是否有理由将该值提升为int 而不是unsigned int?后者不会引起任何这种混乱。
【问题讨论】:
-
是不是因为
42被假定为int而int | int是int?我会尝试使用a | 0x0f。 -
@tadman 抱歉,这就是我的本意。
-
@chux-ReinstateMonica 但如果它是一样的,它仍然被提升为
int? -
我不认为促销活动完全取决于您正在执行的操作。
-
@3Dave 0x0f 是一个整数常量。数字的大小无关紧要,除非添加了一些限定后缀,否则它将被视为
int。
标签: c++ bit-manipulation bitwise-operators integer-promotion