bywfssl 2017-08-04 02:51 采纳率: 100%
浏览 2189

位运算求绝对值的方法?

 int abs(int x)                         //取绝对值
{
    x=x<<1;
    x=x>>1;
    return x;
}
这种方法对吗?
 int abs(int x)                         //取绝对值
{
    int temp = x >> 31;
    return (x ^ temp) - temp;
}
这种方法是怎么实现的?
  • 写回答

2条回答 默认 最新

  • 大米粥哥哥 2017-08-04 04:22
    关注

    首先你要知道计算机存的是补码

    所以上面第一个有点想当然了
    至于下面的算法

    temp = x >> 31;
    判断temp 正temp为0 很好理解 负数temp 为-1? 这是算数移位 负数移31位 其值为1 就是111...1111 这是补码形式 其值为-1

    (x ^ temp) - temp;
    x与其异或 - -1 异或的话11为0 01为1 其实就是取反加一 就是其正数值

    评论

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型