Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2011, 15:45   #1
Buddy
Новичок
Джуниор
 
Регистрация: 18.01.2011
Сообщений: 1
По умолчанию Задача на Си

В байтовой записи числа посчитать количество единичных битов и переместить их в конец. Условие - побитовая обработка (т.е. без использования массивов), ввод и вывод - шестнадцатиричный.
Может, кто подскажет? Счетчик есть, а вот как переместь единицы в конец - не пойму

#include <iostream>

using namespace std;

int main()
{
unsigned z;
int c=0;
scanf ("%x", &z);
while (z!=0)
{
if ((z&1)==1)
c++;
z>>=1;
}
printf ("%d\n", c);
}
Buddy вне форума Ответить с цитированием
Старый 19.01.2011, 02:41   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Очень просто. Если у Вас в записи числа n единичек, то при перемещении в конец (я так понимаю имеются ввиду младшие биты) они образуют число 2^(n-1)-1
Код:
int a = 0;
for (int i = 0; i < c; i++)
  a = (a << 1) + 1;
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на С++ HelpC++ Фриланс 4 18.01.2011 13:51