C 位操作
2012-08-23 11:45
176 查看
由于C基础不牢,对位的操作一直不能很好的理解,今天早上想了1个小时才相同,写个博客加深一下理解。
题目:现在有10,000,000个整数,里面有重复的数字,需要找出来。
理解:10,000,000个整数需要对应的10,000,000bit,一个整数是32bit,所以需要的数组a[]的个数为10,000,000/32+1。
现在有一个整数1000,首先通过1000/32得出对应的bit在第31个整数中的第8位。为了把这位设为1,用a[31]|=(1<<8)就可以了,清除这位用a[31]&=~(1<<8),检查该位用a[31]&(1<<8)
“i/32”用"i>>5"表示,得到上述8的方法是用“i&0*1F”,也就是求“i”的模。
代码如下:
题目:现在有10,000,000个整数,里面有重复的数字,需要找出来。
理解:10,000,000个整数需要对应的10,000,000bit,一个整数是32bit,所以需要的数组a[]的个数为10,000,000/32+1。
现在有一个整数1000,首先通过1000/32得出对应的bit在第31个整数中的第8位。为了把这位设为1,用a[31]|=(1<<8)就可以了,清除这位用a[31]&=~(1<<8),检查该位用a[31]&(1<<8)
“i/32”用"i>>5"表示,得到上述8的方法是用“i&0*1F”,也就是求“i”的模。
代码如下:
#define BITSPERWORD 32 #define SHIFT 5 #define MASK 0*1F #define N 10000000 int a[1+N/BITSPERWORD] void set(int i){ a[i>>SHIFT]|=(i<<(i&MASK));} void clr(int i){ a[i>>SHIFT]&=~(i<<(i&MASK));} void set(int i){ a[i>>SHIFT]&(i<<(i&MASK));}
相关文章推荐
- C#中的位操作
- [转自N神]Bitwise gems - fast integer math(AS3中的位操作)
- pku 2309 BST 位操作
- c及c++的位操作及其对比
- 常用 位操作
- C# 位操作
- C语言面试题_位操作
- 交换变量的值的两种有趣方法(位操作与算术法)
- 位操作
- [C++ 学习] C++ Primer 笔记 bitset 和 位操作
- 【转】位操作
- 原子位操作
- WINCC6.2 VB脚本如何对变量进行位操作?
- c/c++ 位操作基础
- 两道关于位操作的面试题
- 位操作基础篇之位操作全面总结
- Cracking the coding interview--Q1.1(python的位操作)
- 常用位操作,读8位 I2C 1302 18B20 .
- 位操作
- 【重温位操作】C++位操作介绍