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

计算一个整数的符号

    博客分类:
  • MTK
阅读更多
int v;      // 找出v的符号
int sign;   // 保存结果

// CHAR_BIT 是一个字节的位数,一般为8.
sign = -(v < 0);  // 如果v < 0 则 -1, 否则为 0. 
// 或者, 为了避免使用分支指令,标志寄存器 (IA32):
sign = -(int)((unsigned int)((int)v) >> (sizeof(int) * CHAR_BIT - 1));
// 或者更简单的使用
sign = v >> (sizeof(int) * CHAR_BIT - 1); 


后面的表达式在32位整数下面计算出sign = v >> 31,这招是比sign = -(v < 0)要快的。
当有符号的整数右移31位的时候,最左边的位被移到其他位,当为负数的时候最左边是1,反之为0,这跟cpu的架构也有关系。



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics