美文网首页IT 开发设计艺术
高效bit 位经典操作

高效bit 位经典操作

作者: tutengwolf | 来源:发表于2018-04-06 16:16 被阅读0次
  1. 奇偶判断
    只需要判断数字的最后一个比特位是0 还是 1, 只要最后一位为0 都可以表示成 x*2 即 x<<1
    bool is_odd(int i){
    return i&1;
    }
  2. 交换两数
    a 和 b 进行交换 ,一般最常用的是
    c=a;
    a=b;
    b=c;
    又或者,不用第三个变量
    a=a+b;
    b=a-b;
    a=a-b;
    以上翻译成汇编语言可能生成的代码比较多,可以通过异或运算进行交换,依据的原理有两点 1) 一个数和自身异或为0 ; 2)一个数和0异或是自身。
    a=a^b
    b=a^b
    a=a^b
  1. 变换符号
    我们以前学习计算机基础的时候,都知道一个负的二进制数转换成十进制应该是多少,怎么计算? 对,就是对该二进制的bit 位 取反+1 。对于整数转换成负数也是如此。所以对于一个数取反应该就是
    ~a+1

  2. 取绝对值
    int i = a >> 31; //获取符号位
    int abs = (i == 0 ? a : (~a + 1)) ;// 如果i==0 代表是正数,直接返回即可,否则为-1取反。

我们知道一个数和-1 (0xFFFFFFFF)异或就是取反; 和0 异或就是自身, 所以上面求abs的时候可以表示为 (a ^ -1)+1 ; 而 i 不是0 就是-1 ,所以abs 赋值可以进一步优化为 ( a^i)-i 。
所以取反的步骤少了判断,即为 :
int i = a >> 31;
int abs=(a^i)-i;

相关文章

  • 高效bit 位经典操作

    奇偶判断只需要判断数字的最后一个比特位是0 还是 1, 只要最后一位为0 都可以表示成 x*2 即 x<<1bo...

  • bit位操作

    https://catonmat.net/low-level-bit-hacks

  • 第七章 操作位和位串(三)

    第七章 操作位和位串(三) 操作位串 要创建新的位串,请使用 $bit 函数将所需位设置为 1: 使用 $bit ...

  • Bit Manipulation Summary

    来总结一下Bit Manipulation的一些常见操作: 将第n位bit 设为1: 将第n位bit 设为0: 将...

  • Lua bit库 & 位操作

    -- bit库(默认32位) bit={data32={}} for i=1,32 do bit.data32...

  • No41.浮点数近似规则

    名词 保留位(Guard bit)、近似位(Round bit)和粘滞位(Sticky bit)。保留位:近似后的...

  • 汇编学习(7), Bit 操作

    本篇介绍 本篇介绍下汇编中的bit操作。 bit操作 首先写一个包含bit各种操作的函数: 这儿再回顾下leave...

  • C++ 位运算符(bit)

    位运算符(bit) 位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示: 假设如果 A = 60...

  • [LeetCode] Bit 操作

    本文介绍几种差用的位操作: n = n & (-n) n = n & (-n) 能取出最右端为'1'的位。比如:2...

  • C语言位运算

    C语言里位运算就是对一个比特(Bit)进行操作,比特(Bit)是计算机的一个电子元件,只有通电和断电两种状态(这也...

网友评论

    本文标题:高效bit 位经典操作

    本文链接:https://www.haomeiwen.com/subject/birshftx.html