Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
bloodvlad
0 / 0 / 0
Регистрация: 23.10.2014
Сообщений: 59
#1

Подсчёт нулей в двоичном коде - C++

25.11.2014, 23:41. Просмотров 372. Ответов 5
Метки нет (Все метки)

Есть код который возвращает количество единиц в двоичном представлении целого числа,
как переделать что бы он считал количество нулей ?
C
1
2
3
4
5
6
7
8
9
10
int count (int a)
{
int r=0;
while(a)
{
a&=(a-1);
++r;
}
return r;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2014, 23:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подсчёт нулей в двоичном коде (C++):

Подсчёт единиц и нулей в двоичном коде - C++
Просьба помочь написать программу на языке C++, которая определяет и выводит на экран количество единиц и нулей в двоичном представлении...

Представить число в двоичном коде и в коде Грея - C++
Всем доброго вечера) у меня такая просьба, помогите написать программу по коду Грея, чтобы пользователь сам ввел число в диапозоне от -100...

Определить, каких цифр больше в двоичном представлении натурального числа N-нулей и единиц - C++
Определить, каких цифр больше в двоичном представлении натурального числа N-нулей и единиц. Циклический алгоритм. Код не надо, только...

Определить, каких цифр больше в двоичном представлении натурального числа N – нулей или единиц - C++
Определить, каких цифр больше в двоичном представлении натурального числа N – нулей или единиц.

Вывести число в двоичном коде - C++
решите задачу, пожалуйста: вывести 1 байтовое целое число без знака в 2-ом коде ( а) с использованием операции деления, б) с...

Вывод float в двоичном коде - C++
И снова здравствуйте форумчане, если не сложно, подскажите с реализацией этой задачи. Ведь float есть тип данных с плавающей точкой. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
RefSol
239 / 178 / 42
Регистрация: 31.10.2010
Сообщений: 549
26.11.2014, 01:02 #2
bloodvlad, очень просто: отнять от общей длинны двоичного представления числа число единиц:
C++
1
2
3
4
5
6
7
8
int count (int a) {
  int r=0;
  while(a) {
    a&=(a-1);
    ++r;
  }
  return (8*sizeof(int) - r);
}
или так:

C++
1
2
3
4
5
6
7
8
int count (int a) {
  int r=8*sizeof(int);
  while(a) {
    a&=(a-1);
    --r;
  }
  return (r);
}
OnePiece
33 / 33 / 22
Регистрация: 22.02.2014
Сообщений: 107
26.11.2014, 01:16 #3
Я думаю, что запись 2 чисел подразумевается не в виде 32 знаков.
А столько, сколько достаточно, то есть 2^n>a.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3801 / 2059 / 526
Регистрация: 18.10.2014
Сообщений: 3,665
26.11.2014, 01:21 #4
Цитата Сообщение от RefSol Посмотреть сообщение
8*sizeof(int) - r
Эта константа называется 'CHAR_BIT'. Не 8, а 'CHAR_BIT'.
OnePiece
33 / 33 / 22
Регистрация: 22.02.2014
Сообщений: 107
26.11.2014, 01:23 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
int count (int a)
{
int r=0;
while(pow(2,r)<=a)
    r++;
while(a)
{
a&=(a-1);
r--;
}
return r;
}
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3801 / 2059 / 526
Регистрация: 18.10.2014
Сообщений: 3,665
26.11.2014, 01:58 #6
Это не так эффективно, как вариант с вычитанием, но все же

C++
1
2
3
4
5
6
7
8
9
unsigned count(unsigned a)
{
  unsigned r = 0;
 
  for (; a != 0; a >>= 1)
    r  += (~a & 1);
 
  return r;
}
Добавлено через 34 минуты
Можно еще предложить вариант, основанный на том же принципе, что и оригинальный код

C++
1
2
3
4
5
6
7
8
9
10
11
unsigned count(unsigned a)
{
  unsigned r = 0;
 
  for (unsigned bit = ~a & ~(~a - 1);
       bit < a;
       a |= bit, bit = ~a & ~(~a - 1))
    ++r;
 
  return r;
}
Выражение '~a & ~(~a - 1)' можно заменить на '~(a | (~a - 1))'
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2014, 01:58
Привет! Вот еще темы с ответами:

Чтение файла в двоичном коде - C++
Моя цель открыть любой файл в двоичном коде и записать этот код в отдельный txt файл #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include...

Отображение ASCII символов в двоичном коде - C++
Добрый день. Есть программа, которая отображает двоичный код ASCII символа. #include &lt;iostream&gt; using namespace std; struct...

Как представить int в двоичном коде - C++
Всем привет! У меня задание подсчитать сколько единиц в бинарном числе, соответствующем некому числу n (введенному десятичному)...там...

Вывести содержимое файла в двоичном коде - C++
Здраствуйте, не могли бы вы помочь с программой? она должна просто показывать битовое представление чисел, записанных в data.dat, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.11.2014, 01:58
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru