不同大小变量的按位运算符标准

Bitwise-operator standard for different sized variables

int8 a = <some value>;
int16 b = <some value>;
a |= b;

与大多数常见系统一样(我用过的所有系统),int8_tint16_t 的转换等级都低于 int, 两个操作数都会提升为后者。

然后,operator |= 对这两个(通常是 32 位)int 进行操作,在最后一步中,结果 int 被转换为 int8_t。如果结果不适合 int8_ta 的值是实现定义的。通常,它只是丢弃额外的位。


实际上,这适用于所有系统,因为 int 至少是 16 位,而 long 至少是 32 位,所以这两种类型都不是您使用的排名可以大于 int.

这里将进行积分提升。 uint8_t 将被提升为 signed int,以及 uint16_t 值,然后转换回 uint8_t.