c++ - 在不使用Abs函数或if语句的情况下获取绝对值

标签 c++ c bit-manipulation

我在考虑如何在不使用if语句或abs()的情况下获取整数的绝对值。起初,我使用左移位(<<),试图使负号超出范围,然后将右移位回到原来的位置,但不幸的是,它对我不起作用。请让我知道为什么它不起作用以及其他替代方法。

最佳答案

Bit Twiddling Hacks:

int v;           // we want to find the absolute value of v
unsigned int r;  // the result goes here 
int const mask = v >> sizeof(int) * CHAR_BIT - 1;

r = (v + mask) ^ mask;

关于c++ - 在不使用Abs函数或if语句的情况下获取绝对值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40836924/

相关文章:

javascript - 为什么在 javascript 中, `2 << -1` 是零而不是一?

c# - 如何有效地验证代表标记枚举的整数?

c++ - 如何创建带有自定义标题的 qtablewidget

c - Jansson lib 解析器

c++ - OpenCV:运算符 "+"错误;添加

c - C 中的 pthreads - pthread_exit

c - 海湾合作委员会错误 : Invalid operands to binary +

c++ - 在不使用 bitset 的情况下如何知道 C++ 中的位状态?

c++ - MS Windows 中的 QT 和 native OpenGL 支持

用户使用 seekg 选择的像素的 C++ RGB 值