从十进制数中获取特定的 k 位

getting specific k bits from a Decimal number

我有一个数字 x,我想打印 x 的 k 位小数 假设我有 12 号 x = 12 k = 3 12 的二进制是 1100 并且 k = 3 所以我得到的新二进制将是 100(十进制是 8)即形成最后一个位置 我想显示 8 作为输出

我想借助 C++ 中的 << 和 >> 来完成此操作 谢谢!!

这是一种方法:将最后 k 位清零,然后从 x 中减去它。

unsigned int last_k_bits(unsigned int x, unsigned int k) {
    return x - ((x >> k) << k);
}

您还可以计算 x 的按位 & 和 1...1 (k 1s)

unsigned int last_k_bits(unsigned int x, unsigned int k) {
    return x & ((1u << k) - 1);
}

此外,100 是十进制的 4,而不是 8

当 k 等于整个宽度(例如 32)时,sparik 的答案不会给出正确的结果,这可能会或可能不会重要,具体取决于应用程序。这个版本也为这种情况提供了正确的结果:

unsigned int last_k_bits(unsigned int x, unsigned int k) {
    return x & ~((((k >> 5) - 1) << k));
}

此处,如果 k 为 32,则 k >> 5 给出 1,否则为 0。减一得到全一,除了 k = 32 是全零。移动 k 然后给出我们需要的掩码的倒数。