【发布时间】:2021-04-14 13:20:59
【问题描述】:
我想只为 MSB 创建一个掩码,但是操作系统上 int 的宽度假设是未知的,因此您不能假设为 32 位。
见下文
// THE FOLLOWING FAILS BECAUSE OF SYSTEM IMPLEMENTING A LOGICAL
// RIGHT SHIFT
// Idea is
// 1. 0 inverted = all 1's
// 2. Arithmetic shift right
// 3. Then invert again to preseve MSB '1'
const int unsigned mask = ~(~0>>1); // FAIL, because of logic shift
假设是 16 位系统
- ~0 给 FFFF
- ~0>>1 给 7FFF
- ~(~0 >> 1) 给8000
【问题讨论】:
-
您在寻找
int或unsigned的MSBit? (它们不必相同。)正在寻找int或unsigned掩码? -
@chux。如果系统具有 8、16、32 或 64 位的 int,那么我希望代码获得 msb。 Mikecat 有答案
-
Wes Taylor-Rendal,Mikecat 的答案提供了无符号的 MSBit,它很少与您的 int 目标不同。此外,该答案不适用于 8 位,也可能不适用于 16 位。
标签: c bit mask portability