1.可以进行位运算的类型
char int short long int long long 无论有符号还是无符号都可以
不可以进行位运算的类型
float double long double 指针
2.
& 位与 非零即为真 只有都为1才为
| 位或 有一个1即为真
^ 异或 相异为1
~ 未返 c=0001 1000 ~c=1110 0111
3.有关于位运算的题
只能针对于 unsigned int
#include<stdio.h
int GetX1Bit(unsigned int x)//通过右移的方法获取一个数的比特位
{
int sum = 0;
while (x != 0)
{
if (x & 0x01)
{
sum += 1;
}
x = x >> 1;
}
return sum;
}
int main()
{
unsigned int x = 0;
scanf_s("%d", &x);
int num = GetX1Bit(x);
printf("%d", num);
return 0;
}
改进函数
int GetX1Bit(int x)//通过右移的方法获取一个数的比特位
{
int sum = 0;
while(x!=0)
{
sum+=1;
x=x&(x-1);
}
return sum;
}
**查表法
int GetX1Bit2(int x)//通过右移的方法获取一个数的比特位
{
int digit[] = { 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4 };//1-16中二进制的1的个数
int num = 0;
for (int i = 0; i < 8; ++i)
{
num += digit[x & 0x0f];
x = x >> 4;
}return num;
}
改进
int GetX1Bit2(int x)//通过右移的方法获取一个数的比特位
{
int num = 0;
for (int i = 0; i < 8; ++i)
{
num += "\0\1\1\2\1\2\2\3\1\2\2\3\2\3\3\4"[x & 0x0f];
x = x >> 4;
}return num;
}