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

Количество нулей в 32 разрядном слове - C++

Восстановить пароль Регистрация
 
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
14.12.2011, 01:12     Количество нулей в 32 разрядном слове #1
Помогите пожалуйста написать: Подсчитайте кол. нулей в 32-разрядном двоичном машинном слове. На С++.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2011, 01:12     Количество нулей в 32 разрядном слове
Посмотрите здесь:

C++ Массив состоит из нулей и единиц. Сформировать массив,состоящий из нулей и подсчитать их количество
Подсчитать количество положительных и отрицательных чисел и количество нулей в массиве C++
C++ количество букв в слове, количество предложений, самое длинное слово в предложении
C++ Простые числа и количество нулей
Записать число в 32-разрядном массиве C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.12.2011, 01:26     Количество нулей в 32 разрядном слове #2
C++
1
2
3
4
5
6
7
8
9
10
template<typename T>
size_t NumberOfZeroBit(T number) {
  size_t result = 0;
 
  for (T mask = 0x1; mask; mask <<= 1)
    if ((number & mask) == 0)
      ++result;
 
  return result;
}
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
14.12.2011, 01:27  [ТС]     Количество нулей в 32 разрядном слове #3
миллион спасибо!
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.12.2011, 01:35     Количество нулей в 32 разрядном слове #4
Vidok, нашел ошибки в коде, поправил, сообщение обновил. Пример использования:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
template<typename T>
size_t NumberOfZeroBit(T number) {
  size_t result = 0;
 
  for (T mask = 0x1; mask; mask <<= 1)
    if ((number & mask) == 0)
      ++result;
 
  return result;
}
 
int main() {
  std::cout << NumberOfZeroBit(0) << " " << NumberOfZeroBit(2) << " " << NumberOfZeroBit(3) << std::endl;
}
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
14.12.2011, 01:45  [ТС]     Количество нулей в 32 разрядном слове #5
А где можно почитать подробно и разобраться? Код ясен, но что там происходит на машинном уровне не очень.

Добавлено через 4 минуты
Еще вопрос. Куда здесь можно прилепить assert?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.12.2011, 01:52     Количество нулей в 32 разрядном слове #6
"Мета" вариант решения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
namespace Implementation
{
   template<unsigned value, unsigned mask>
   struct NumberOfZeroBitHelper
   {
   private:
      static const bool IsZeroBit = (value & mask) == 0;
   public:
      static const size_t Value = IsZeroBit + NumberOfZeroBitHelper<value, mask << 1>::Value;
   };
   
   template<unsigned value>
   struct NumberOfZeroBitHelper<value, 0>
   {
      static const size_t Value = 0;
   };
}
 
template<unsigned value>
struct NumberOfZeroBit
{
   static const size_t Value = Implementation::NumberOfZeroBitHelper<value, 0x1>::Value;
};
 
int main() { 
 
   std::cout << NumberOfZeroBit<0>::Value << " " 
             << NumberOfZeroBit<1>::Value << " " 
             << NumberOfZeroBit<2>::Value << " " 
             << NumberOfZeroBit<3>::Value << std::endl;
}
Цитата Сообщение от Vidok Посмотреть сообщение
Куда здесь можно прилепить assert?
Пожалуй, некуда да и не за чем.
Цитата Сообщение от Vidok Посмотреть сообщение
А где можно почитать подробно и разобраться?
В любой книге по Си/C++ в разделе битовые операции.
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
14.12.2011, 01:57  [ТС]     Количество нулей в 32 разрядном слове #7
Спасибо) но у меня в университете пока процедурное программирование на базе С++. По этому чем проще, тем лучше)

Добавлено через 51 секунду
Но вот доцент говорит можно

Добавлено через 2 минуты
У меня возник вариант прилепления assert. От 32 отнять результат программы которая считает количество единиц и сравнить с результатом количества нулей. Как бы немного глуповато, но все таки.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.12.2011, 02:08     Количество нулей в 32 разрядном слове #8
Цитата Сообщение от Vidok Посмотреть сообщение
Но вот доцент говорит можно
assert является механизмом проверки утверждений. Утверждения относительно функций это условия, которые должны быть истинны перед вызовом функции (предусловия) или после вызова(постусловия). Т.е. предусловия это то, что необходимо функции для выполнения своей работы, постусловия же это то, что функция гарантирует по результатам своего выполнения при условии соблюдении предусловий. К примеру в случае с функцией удаления файла, предусловием будет являтся наличие указанного файла, а постусловием, то что файл будет удален.
Теперь вопрос: при несоблюдении каких условий функция вычисления количества сброшенных бит не сможет выполнить свою работу?

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2011, 02:10     Количество нулей в 32 разрядном слове
Еще ссылки по теме:

Определить количество слов в заданном тексте и количество символов в каждом слове C++
Определить количество нулей в цифровой записи числа, кроме нулей в младших разрядах (Pascal -> С++) C++
Определить количество нулей в цифровой записи числа, кроме нулей в младших разрядах C++

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

Или воспользуйтесь поиском по форуму:
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
14.12.2011, 02:10  [ТС]     Количество нулей в 32 разрядном слове #9
Цикл подсчета закончен точнее незаконченный.

Не по теме:

Может быть и так, а может это просто дать возможность студентам подумать

Yandex
Объявления
14.12.2011, 02:10     Количество нулей в 32 разрядном слове
Ответ Создать тему
Опции темы

Текущее время: 19:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru