Посчитать количество едениц в двоичном представлении числа. Найти ошибку в коде - C (СИ)
Формулировка задачи:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
union
{
char p[4];
int t;
}sym;
int t;
printf ("input: ");
scanf ("%d", &t);
printf ("%d = %x",t,t);
sym.t=0;
scanf("%c", &sym.p[0]);
int a=sym.t;
char temp;
temp=sym.p[0];
sym.p[0]=sym.p[3];
sym.p[3]=temp;
printf("\hex format after operation %x",sym.p);
int Bits1(); //хотела посчитать кол-во едениц в двоичном представлении числа а
{
unsigned char a=sym.t;
int i = 0, r = 0;
for(;i<8*sizeof(sym.p); i++, a>>=1)
if(a & 1)
r++;
return r;//тут ругается тип возвращаемого значения не соотвествует типу функции
}
getchar();
}Решение задачи: «Посчитать количество едениц в двоичном представлении числа. Найти ошибку в коде»
textual
Листинг программы
int nbits(unsigned int x)
{
int n = 0;
while( x != 0 ) {
n += x & 1;
x >>= 1;
}
return n;
}
Объяснение кода листинга программы
- В функции
nbitsаргументом являетсяunsigned int x. - Переменная
nинициализируется значением 0 и используется для подсчета количества единиц. - В цикле
whileпроисходит проверка, не равно ли значениеxнулю. - В каждой итерации цикла значение
xсдвигается вправо на 1 бит с помощью оператора>>. - С помощью оператора
&получается младший бит числаx, который затем приравнивается к 1. - Значение 1 добавляется к переменной
n. - После завершения цикла возвращается значение переменной
n.