我创建了一个程序,该程序应该接收一个整数并返回该数字的二进制表示形式。现在,我想添加一个函数来计算数字中有多少个“ 1”,这就是我遇到麻烦的地方,例如:
输入:123 -> 0b01111011-> 4(因为“ 1”附近有4个)
要做到这一点,我需要将当前脚本的输出存储在变量中,但是由于我使用的是putchar,所以我不能超出这个范围:
#include <stdio.h>
void displayBits(unsigned int value); // prototype
int main(void)
{
unsigned int x; // variable to hold user input
printf("%s", "Enter a nonnegative int: ");
scanf("%u", &x);
displayBits(x);
}
// display bits of an unsigned int value
void displayBits(unsigned int value)
{
// define displayMask and left shift 31 bits
unsigned int displayMask = 1 << 7;
printf("%10u = ", value);
printf("0b");
// loop through bits
for (unsigned int c = 1; c <= 8; ++c) {
putchar(value & displayMask ? '1' : '0');
value <<= 1;
}
putchar('\n');
}
答案 0 :(得分:0)
如果您要计算设置为1的最大相邻位数,则可以按照以下步骤进行操作。
具有一个计数器,该计数器跟踪找到的行中“ 1”位的大小。当找到“ 1”增量时,将其设为“ 0”时将其设置为0。还需要一个变量来跟踪最长的运行时间。如果当前电流大于最长电流,则将最长电流设置为当前电流。
int current_run = 0, longest_run = 0;
while (displayMask) {
if (value & displayMask) {
current_run++;
if (current_run > longest_run) {
longest_run = current_run;
}
putchar('1');
} else {
current_run = 0;
putchar('0');
}
displayMask >>= 1;
}