`
buluzhai
  • 浏览: 108633 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

不用分支指令计算一个整数的绝对值

阅读更多
分支指令的代价高,所以尽量避免使用。
跟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;



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics