zoukankan      html  css  js  c++  java
  • 常用位运算

    1. 判断一个整数是否为偶数

    boolean isEven (int n) {
        return (n & 1) == 0;
    }
    
    // 下面的代码用来判断一个整数是否为奇数
    boolean isOdd (int n) {
        return (n & 1) == 1;
    }

    2. 交换两个整数

    int a = 6;
    int b = 1;
    a ^= b;
    b ^= a;
    a ^= b;

    3. 求一个整数的绝对值

    int i = a >> 31;
    int abs = i == 0 ? a : (~a + 1));

    4. 变换符号

    int a = 45;
    int b = -9;
    System.out.println(~a + 1);
    System.out.println(~b + 1);

    5. 求两数平均值

    (x & y) + ((x ^ y) >> 1);

    6. 取int型变量的第k位

    a >> (k - 1) & 1;

    7:取末k位

    a & ((1 << k) - 1);

    总结

        功能                    示例                    位运算
    去掉最后一位          (101101 -> 10110)             x >> 1
    在最后加一个0         (101101 -> 1011010)           x << 1
    在最后加一个1         (101101 -> 1011011)           x << 1 + 1
    把最后一位变成1       (101100 -> 101101)            x | 1
    把最后一位变成0       (101101 -> 101100)            x | 1 - 1
    最后一位取反          (101101 -> 101100)            x ^ 1
    把右数第k位变成1      (101001 -> 101101,k=3)        x | (1 << (k - 1))
    把右数第k位变成0      (101101 -> 101001,k=3)        x & ~ (1 << (k - 1))
    右数第k位取反         (101001 -> 101101,k=3)        x ^ (1 << (k - 1))
    取末三位              (1101101 -> 101)              x & 7
    取末k位               (1101101 -> 1101,k = 5)       x & ((1 << k)-1)
    取右数第k位           (1101101 -> 1,k = 4)          x >> (k-1) & 1
    把末k位变成1          (101001 -> 101111,k = 4)      x | (1 << k-1)
    末k位取反             (101001 -> 100110,k = 4)      x ^ (1 << k-1)
    把右边连续的1变成0    (100101111 -> 100100000)      x & (x + 1)
    把右起第一个0变成1    (100101111 -> 100111111)      x | (x + 1)
    把右边连续的0变成1    (11011000 -> 11011111)        x | (x - 1)
    取右边连续的1         (100101111 -> 1111)           (x ^ (x + 1)) >> 1
    去掉右起第一个1的左边 (100101000 -> 1000)           x & (x ^ (x - 1))
    判断奇数              (x & 1) == 1
    判断偶数              (x & 1) == 0
  • 相关阅读:
    Nhibernate初学
    TSQL笔记
    Java是剑客飘逸;.NET是刀客霸道 (一) 【转载】
    在datagrid中求和(vb.net,c#)
    Java牢骚之我见(转载)
    Java是剑客飘逸;.NET是刀客霸道 (二) 【转载】
    可可西里观后感(转)保护藏羚羊
    .net快速入门方法,转csdn
    手工添加“显示桌面”快捷方式
    过年128>24
  • 原文地址:https://www.cnblogs.com/itsone/p/15767154.html
Copyright © 2011-2022 走看看