C语言例题求助
本帖最后由 cola_ 于 2020-7-31 16:40 编辑求助各位大佬给解释一下程序,小弟我刚步入C语言才疏学浅看不懂这个例子
程序是读取到两个非负整数安位进行逻辑与和逻辑或等运行,但是我看不懂他自定义的函数,也不知道这样写有什么好处
#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);
}
int print_bits(unsigned x)
{
int i;
for(i = int_bits() - 1; i >= 0; i--)
putchar(((x >> i) & 1U) ? '1' : '0');
}
int main(void)
{
unsigned na, nb;
puts("请输入两个非负整数。");
printf("整数A:"); scanf("%u", &na);
printf("整数B:"); scanf("%u", &nb);
printf("\nA ="); print_bits(na);
printf("\nB ="); print_bits(nb);
printf("\nA & B ="); print_bits(na & nb);
printf("\nA | B ="); print_bits(na | nb);
printf("\nA ^ B ="); print_bits(na ^ nb);
printf("\n~A ="); print_bits(~na);
printf("\n~B ="); print_bits(~nb);
putchar('\n');
return (0);
}
#include <stdio.h>
int count_bits(unsigned x)
{
int count = 0;//累计无符号整形x的bits位数
while(x) {//直到x为0退出循环
if (x & 1U) count++;//x与无符号1与,也就是最低位为1,count加1,0则继续
x >>= 1;//无符号整形x一次向右移动一位,便于上一个操作是,对于x的每一位操作,一直从低位到高位,按位与
}
return (count);
}
int int_bits(void)
{
return count_bits(~0U); //~0U就是无符号整形0按位取反,也就是全1,也就是说这个数是固定32位无符号整形最大值
}
int print_bits(unsigned x)//从高位往低位打印无符号整形x的bit位
{
int i;
for(i = int_bits() - 1; i >= 0; i--)//i取值范围为,但是循环是i从31到0递减,所以这个是从高位开始,一直往低位打印
putchar(((x >> i) & 1U) ? '1' : '0'); //从高位到低位打印无符号整形x的bits,x向有移动i位再与上无符号整形1,就是表示当前位为1则打印字符1,0则打印字符0
}
int main(void)
{
unsigned na, nb;
puts("请输入两个非负整数。");
printf("整数A:"); scanf("%u", &na);
printf("整数B:"); scanf("%u", &nb);
printf("\nA ="); print_bits(na);
printf("\nB ="); print_bits(nb);
printf("\nA & B ="); print_bits(na & nb);
printf("\nA | B ="); print_bits(na | nb);
printf("\nA ^ B ="); print_bits(na ^ nb);
printf("\n~A ="); print_bits(~na);
printf("\n~B ="); print_bits(~nb);
putchar('\n');
return (0);
} count_bits是计算一个无符号整数一共有多少位(BIT)为1
int int_bits(void)
{
return count_bits(~0U);
}
这个int_bits返回的结果就是最大的无符号整数一共有多少位,因为~0U就是全1的无符号整数了。
这样写最大的好处就是与系统无关,与平台无关,理论上可以自动计算获得不同平台上的无符号整数的最大位数。
然后print_bits就可以按照这个最大位数来逐位输出一个无符号整数了。
这个写法还是蛮聪明的,值得学习。 andersgong 发表于 2020-8-5 07:52
count_bits是计算一个无符号整数一共有多少位(BIT)为1
int int_bits(void)
{
多谢大佬指点 EzGDNull 发表于 2020-8-1 13:45
#include
int count_bits(unsigned x)
{
多谢大佬
页:
[1]