下面的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 );
字符串
**更新:**需要说明的是,这不是家庭作业或XY问题,建议std::bitset
回答问题。
3条答案
按热度按时间o4hqfura1#
你可以这样做
字符串
(使用>>移动两个值,使所需的位位于最低有效位,使用&仅选择^操作结果的较低位;然后将结果移动到原始目的地的否则为零值的位置^。结果与将in的bit in_bit复制到out的bit out_bit相同。)
2nbm6dog2#
在一行中执行此操作的一种方法是首先将输出位重置为零,然后将其与
in
数字的任何位进行OR运算:字符串
kxkpmulp3#
试试这个:
字符串
说明:
(out & ~(1 << out_bit))
保留out
中不感兴趣的位。(in & (1 << in_bit)
选择in
中感兴趣的位(((in & (1 << in_bit)) >> in_bit) << out_bit)
将钻头定位在正确位置。