Rea*_*ude 2 c bit-manipulation
我正在做这个..
value >> 3;
Run Code Online (Sandbox Code Playgroud)
它总是朝着负数方向发展。如何用右移除法向零舍入?
天哪,答案很糟糕;你想在不分支的情况下解决这个问题,但也不破坏你的正数。
这里是 :
(int)(value+(((unsigned)value)>>31)) >> 3
Run Code Online (Sandbox Code Playgroud)
需要强制转换为 (unsigned) 来执行逻辑移位并仅获取符号位,然后我们需要强制转换回 (int) 来执行算术右移。
上面的代码假设您的 int 数据类型是 32 位,在这种情况下您当然应该使用 int32_t 等数据类型。