gpt4 book ai didi

c++ - 位操作 : keeping the common part at the left of the last different bit

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:59:37 25 4
gpt4 key购买 nike

考虑两个用二进制写的数字(左边是 MSB):

X = x7 x6 x5 x4 x3 x2 x1 x0

Y = y7 y6 y5 y4 y3 y2 y1 y0

这些数字可以有任意位数,但都是同一类型。现在考虑 x7 == y7x6 == y6x5 == y5,但是 x4 != y4

如何计算:

Z = x7 x6 x5 0 0 0 0 0

或者换句话说,如何有效地计算一个数字,使公共(public)部分保持在最后一个不同位的左侧?

template <typename T>
inline T f(const T x, const T y)
{
// Something here
}

例如,对于:

x = 10100101
y = 10110010

它应该返回

z = 10100000

注意:这是为了 super 计算的目的,这个操作将被执行数千亿次,所以应该避免一个一个地扫描位...

最佳答案

我的回答基于@JerryCoffin 的回答。

int d = x ^ y;
d = d | (d >> 1);
d = d | (d >> 2);
d = d | (d >> 4);
d = d | (d >> 8);
d = d | (d >> 16);
int z = x & (~d);

关于c++ - 位操作 : keeping the common part at the left of the last different bit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21520622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com