zoukankan      html  css  js  c++  java
  • 《编程珠玑》

    用位操作实现位图:

    #define BITSPERWORD 32
    #define SHIFT 5
    #define MASK 0x1F
    #define N 10000000
    int a[1 + N/BITSPERWORD];

    void set(int i) { a[i>>SHIFT] |= (1<<(i & MASK)); } //就是将指定的bit赋1
    void clr(int i) { a[i>>SHIFT] &= ~(1<<(i & MASK)); } //就是将指定的bit清0
    int test(int i){ return a[i>>SHIFT] & (1<<(i & MASK)); } //就是取一下存入的值

    这段代码读的时候竟然没完全理解,主要是1<<(i & MASK)

    原来其意义是1左移(i & MASK)位,而我理解成了将(i & MASK)左移1位,基础还是不够扎实啊,引以为戒。其实比较容易想到的,因为算法的思路我是理解的,以后不要死脑筋。哈哈,这个操作符看来设计得不太好。

  • 相关阅读:
    2
    异常处理
    接口
    抽象与多态
    关联关系
    9-13
    数据类型转换
    Day3
    对象和类
    MyEclipse导入现成项目出现小红叉错误
  • 原文地址:https://www.cnblogs.com/ph829/p/5567673.html
Copyright © 2011-2022 走看看