gpt4 book ai didi

c++ - 将一个整数的位 X 设置为另一个整数的位 Y 而无需分支?

转载 作者:可可西里 更新时间:2023-11-01 18:08:57 24 4
gpt4 key购买 nike

下面的copy_bit 函数可以简化为out[out_bit] = in[in_bit] 吗? (即不使用 if 语句)

template< typename T >
inline void copy_bit( T& out, const T in, const std::size_t out_bit, const std::size_t in_bit )
{
if ( (in & (1 << in_bit)) != 0 )
{
out |= (1 << out_bit); // Set bit
}
else
{
out &= ~(1 << out_bit); // Clear bit
}
}

// Set bit 4 in x to bit 11 in y
copy_bit( x, y, 4, 11 );

更新:需要说明的是,这不是家庭作业,也不是建议 std::bitset 回答问题的 XY 问题。

最佳答案

你可以这样做:

//Change the bit if and only if they are not equal:
out ^= (((out >> out_bit) ^ (in >> in_bit)) & 1) << out_bit;

(移动两个值,使所需的位在 >> 的最低有效位置,仅使用 & 选择 ^ 操作结果的较低位;然后将结果移动到其他零值的位置以^ 与原始目的地。结果与将 in 的位 in_bit 复制到 out 的位 out_bit 相同。)

关于c++ - 将一个整数的位 X 设置为另一个整数的位 Y 而无需分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25236295/

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