分支指令的代价高,所以尽量避免使用。
跟r = (v < 0) ? -(unsigned)v : v相比,下面的指令数是差不多的,但是更快。
跟r = (v < 0) ? -(unsigned)v : v相比,下面的指令数是差不多的,但是更快。
int v; //找出v的绝对值
unsigned int r; // 保存结果
int const mask = v >> sizeof(int) * CHAR_BIT - 1;//CHAR_BIT是字节位数,一般为8
r = (v + mask) ^ mask;
//等价于
r = (v ^ mask) - mask;