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

    位运算

    1. 算法分析

    原码和补码
    原码: x
    反码: ~x
    补码: y = ~x + 1

    移位

    1. 左移: x << n 等价于 x * (2 ^ n)
      例如:x << 2为 1 * (2 ^2)
    2. 右移: x >> n 等价于 x / (2 ^ n), 如果x为正数,那么在最高位补上0;如果x为负数,那么在最高位补上1

    使用异或来生成配偶
    (0, 1), (2,3 ), (4, 5), (6, 7)为配偶对
    0^1 = 1, 1 ^ 1 = 0
    2^1 = 3, 3 ^ 1 = 2
    4 ^1 = 5, 5 ^ 1= 4
    即一个数字异或1得到它的配偶

    得到最后一个1:lowit运算
    lobit(n) = n & -n;

    判断两个数的奇偶性是否相同

    1. a与b的奇偶性不同 <=> 则(a + b ) & 1 = 1;
    2. a与b的奇偶性相同 <=> 则(a + b ) & 1 = 0;

    异或性质
    结合律: (a ^ b) ^ c == a ^ (b ^ c)
    对于任何x,有: x ^ x = 0, x ^ 0 = x
    自反性: a ^ b ^ b = a

    数据范围
    Image.png

    2. 板子

    判断一个数字每一位上的数字是几

    int n = 10;
    for (int i = 3; i >= 0; --i) cout << (n >> i & 1);
    

    判断一个数是奇数还是偶数

    int n = 10;
    if (n & 1) cout << "奇数";
    else cout << "偶数" ;
    

    lowbit操作

    // 返回最后一个1及其后面的数字:比如10 = (1010)2, 运行一次lowbit,返回10;14 = (1110)2,运行一次lowbit,返回10
    int lowbit(int x)
    {
        return x & -x;
    }
    
  • 相关阅读:
    TreeList Linq
    MasterDetail Linq
    C# 事务处理
    设计模式——代理模式(Proxy Pattern)
    设计模式——装饰模式(Decorator Pattern)
    C# 调用WCF服务
    加密解密
    Effective C#高效编程(02:常量)
    切换城市功能
    DataPager控件使用
  • 原文地址:https://www.cnblogs.com/spciay/p/13064118.html
Copyright © 2011-2022 走看看