按位运算符
按位与运算符 | a & b | 按位计算 a 和 b 的逻辑与 |
按位或运算符 | a | b | 按位计算a和b的逻辑或 |
按位异或运算符 | a ^b | 按位计算a和b的逻辑异或 |
~运算符 | ~a | 计算a的反码(将每一位取反之后的值) |
注:这些运算符的操作必须是整数类数据类型或者枚举型。如果应用于浮点型等数据类型操作数,编译时就会出错。
#include <stdio.h>
int count_bits(unsigned x){
int count = 0;
while(x) {
if (x & 1U) {
count++;
}
x >>= 1;
}
return count;
}
int int_bits(void){
return count_bits(~0U);
}
void print_bits(unsigned x){
int i ;
for (i = int_bits() - 1; i >= 0; i--){
putchar(((x >> i) & 1U) ? '1' : '0');
}
}
int main(void){
unsigned num1, num2;
printf("请输入两个非负整数。\n");
printf("num1 : ");
scanf("%u", &num1);
printf("num2 : ");
scanf("%u", &num2);
printf("\nnum1 = ");
print_bits(num1);
printf("\nnum2 = ");
print_bits(num2);
printf("\nnum1 & num2 = ");
print_bits(num1 & num2);
printf("\nnum1 ! num2 = ");
print_bits(num1 | num2);
printf("\nnum1 ^ num2 = ");
print_bits(num1 ^ num2);
printf("\n~num1 = ");
print_bits(~num1); //反码
printf("\n~num2 = "); // 反码
print_bits(~num2);
putchar('\n');
return 0;
}
运行结果:
- count_bits函数:返回整数x中设置的位数
- int_bits函数:返回 unsigned 型位数
- print_bits函数: 显示 unsigned 型的位的内容
函数 print_bits 是将无符号整数 x 的所有位有用 0 和 1 来表示的函数。函数 int_bits 和 count_bits 被用于执行这一工作。
注:程序会在判断 unsigned 型的位数之后进行显示。这里展示的是 unsigned 型为16位的例子(如果unsigned型为32位,就会显示32位)。