如果要对一个整数中的某些位进行操作,怎样表示这些在整数中的位置
呢?
可以用掩码(Mask)来表示,比如掩码0x0000ff00表示对一个32位整
数的8-15位进行操作。
1、 取出8-15位
unsigned int a, b, mask = 0x0000ff00;
a = 0x12345678;
b = (a & mask) >> 8; //0x00000056
这样也可以达到同样的效果:
b = (a >> 8) & (0 << 8);
2、 将8-15位清0.
unsigned int a, b, mask = 0x0000ff00;
a = 0x12345678;
b = a & ~mask; // 0x12340078
3、将8-15位置为1.
unsigned int a, b, mask = 0x0000ff00;
a = 0x12345678;
b = a | mask; //0x1234ff78
求二进制中1的个数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int getCnt(unsigned int num)
{
int cnt = 0;
for (; num != 0; num = num >> 1) {
if ((num & 0x1) == 1) {
cnt++;
}
}
return cnt;
}
int main(void)
{ //00000000000000000000000000000000000000000
unsigned int i = 0xcffffff3; //1100 1111 1111 1111 1111 1111 1111 1111 0011
// & 1 1&1 = 1 , 0 & 1 = 0
int cnt = 0;
cnt = getCnt(i);
printf("cnt : %d\n", cnt);
}