小编vvn*_*man的帖子

是否有一种简单的方法来获得std :: bitset <N>的2的补码

std::bitset<N>在我的程序中使用并需要找到最不重要的设置位并进行如下的微不足道的计算:

int num = 5;
int res = num & (-num);
Run Code Online (Sandbox Code Playgroud)

在此之后,最低位num被设置res并且休息全部都是0.这可以-5用2的补码表示法表示.

但我发现std::bitset<N>没有任何运算符重载的一元operator -会给我2的基础位的补码.有没有一种简单的方法来实现2的补码std::bitset<N>?我总是可以使用operator ~翻转位并在它们上面循环执行求和并从LSB开始到MSB,但我正在寻找一种可以避免这种情况的解决方案.

c++ bit-manipulation bitwise-operators bitset

5
推荐指数
1
解决办法
1213
查看次数

仅使用位操作限制0到4095之间的16位带符号值(无分支)

我想约束signed short0到4095之间变量的值,之后我将最重要的8位作为我的最终值用于其他地方.现在我正在以基本的方式做到,如下所示:

short color     = /* some external source */;
/* 
 * I get the color value as a 16 bit signed integer from an
 * external source I cannot trust. 16 bits are being used here
 * for higher precision.
 */

if ( color < 0 ) {
    color = 0;
}
else if ( color > 4095 ) {
    color = 4095;
}

unsigned char color8bit  = 0xFF & (color >> 4);
/*
 * color8bit is …
Run Code Online (Sandbox Code Playgroud)

c c++ optimization bit-manipulation

4
推荐指数
2
解决办法
1644
查看次数