Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
bloodvlad
0 / 0 / 0
Регистрация: 23.10.2014
Сообщений: 59
#1

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

25.11.2014, 23:41. Просмотров 468. Ответов 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;
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2014, 23:41
Ответы с готовыми решениями:

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

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

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

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

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

5
RefSol
489 / 232 / 72
Регистрация: 31.10.2010
Сообщений: 692
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);
}
0
OnePiece
34 / 34 / 47
Регистрация: 22.02.2014
Сообщений: 107
26.11.2014, 01:16 #3
Я думаю, что запись 2 чисел подразумевается не в виде 32 знаков.
А столько, сколько достаточно, то есть 2^n>a.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4395 / 2370 / 657
Регистрация: 18.10.2014
Сообщений: 4,017
26.11.2014, 01:21 #4
Цитата Сообщение от RefSol Посмотреть сообщение
8*sizeof(int) - r
Эта константа называется 'CHAR_BIT'. Не 8, а 'CHAR_BIT'.
0
OnePiece
34 / 34 / 47
Регистрация: 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;
}
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4395 / 2370 / 657
Регистрация: 18.10.2014
Сообщений: 4,017
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))'
0
26.11.2014, 01:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2014, 01:58

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

Чтение файла в двоичном коде
Моя цель открыть любой файл в двоичном коде и записать этот код в отдельный txt...

Подсчёт числа серий положительных, отрицательных чисел и нулей длиной не менее k в массиве
Задача: Составить функцию для подсчёта числа серий положительных,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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