从十进制数中获取特定的 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
然后给出我们需要的掩码的倒数。
我有一个数字 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
然后给出我们需要的掩码的倒数。