1.不依赖机器的位转置
- unsigned int reverse_bits(unsigned int value)
- {
- unsigned int answer = 0;
- for(int i=1; i!=0; i<<=1)
- {
- answer<<=1;
- if (value & 1)
- {
- answer |= 1;
- }
- value>>=1;
- }
- return answer;
- }
2. 位移操作位数为负数
如:a<<-5
在某些机器上实际上是:
a<<27
3. 求数值中值为1的位的个数:
- int count_one_bits(unsigned value)
- {
- int ones;
- for(ones=0; value!=0; value>>=1)
- {
- if (value & 1 !=0) // or: if(value%2 != 0)
- {
- ones++;
- }
- }
- return ones;
- }
4. 置位:
value |= 1 <<bit_number;
5. 清位:
value &= ~ (1<<bit_number);