Как представить int в двоичном коде

Всем привет! У меня задание подсчитать сколько единиц в бинарном числе, соответствующем некому числу n (введенному десятичному)...там что-то с применением операторов >><< должно быть и счётчиком. Как сделать так чтобы прога работала с двоичным представлением, есть ли какой-то оператор или еще что-то т.к. машина как бы сразу при вводе числа должна представлять число в бинаре, можно ли это как-то активировать? (если возможно). Заранее спасибо.
14 ответов

Как сделать так чтобы прога работала с двоичным представлением, есть ли какой-то оператор
В Си нет
т.к. машина как бы сразу при вводе числа должна представлять число в бинаре,
а она и работает в бинаре десятичных цифр она не понимает вот простейший перевод допустим что int 32 бита, чаще всего так и есть
int arr[32];
for(int i=0;i<32;i++)
{
 arr[i]=n&1;
 n/=2; // тоже самое со сдвигом n>>=1;
}


Тут в этом и прикол, что нельзя использовать ни /= ни *=.


машина ... должна представлять число в бинаре
а она в каком предоставляет число? то, что в cout выводит в десятичной - так программа для вас это делает. Хотите в двоичной - скажите ей это.


Вводиться число n в десятичной его видимо нужно перевести в бинарную систему и посчитать сколько там нулей, вот в переводе в динарку в общем и заключается проблема.


Тут в этом и прикол, что нельзя использовать ни /= ни *=.
Замени n /= 2 на n >>= 1. Тебе об этом намекнули в комментарии.


что нельзя использовать ни /=
ну на без них
int arr[32];
for(int i=0;i<32;i++)
{
 arr[i]=n&1;
 n>>=1;
}
*=.
вроде не использовал вот тебе тоже самое с while
int arr[32]={0};
while(n){
 arr[i]=n&1;
 n>>=1;
}
вот подсчет 1 и 0
int cntOne=0;
while(n){
cntOne+=n&1;
 n>>=1;
}
int cntZero=32-cntOne;
короче шаблоны я указал, дальше сам


#include <iostream>
#include <bitset>
using namespace std;
int main()
{
 
    std::bitset<32> temp(19);
    cout << temp.to_string() << endl;
 
}


подсчитать сколько единиц в бинарном числе
посчитать сколько там нулей
ты уж определись


Да тут как бы не суть =)Спасибо, вроде въехал...дальше сам.


вот тебе на закуску подсчет 1 и 0,в четыре раза быстрее
int tblOne[]={0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4};
int cntOne=0;
while(n){
cntOne+=tblOne[n&0x0F];
 n>>=4;
}
int cntZero=32-cntOne;
разбирайся, если разберешься молодец


ValeryS, какое начальное значение у n?


mymedia, любое.


какое начальное значение у n?
какое введут но забыл указать объявлен он должен быть как unsigned int иначе сдвиг вправо будет нехорошо работать,точнее не так как мы хотели Спасибо, что заметил


А всё понял, как это работет. Просто я немного ступил