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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Умножение в двумерном массиве на минимальный элемент http://www.cyberforum.ru/cpp-beginners/thread1311131.html
Помогите найти ошибку. Задан: двумерный массив состоящий из вещественных чисел. Требуется: преобразовать массив, умножив элементы каждой строки на минимальный элемент этой строки. Почему-то не находит минимальный элемент. После ввода числа столбцов и строк он закрывается. #include <iostream>; using namespace std; int main() { float mas; float min; int n,m,j,i;
C++ При одном кострукторе вызывется деструктор, при другом нет - почему? Добавлено через 15 минут Удалите, так вышло что случайно создал 2 темы, основная тут http://www.cyberforum.ru/cpp-beginners/thread1311115.html#post6901575 http://www.cyberforum.ru/cpp-beginners/thread1311125.html
Составить программу для вычисления функции при постоянных значениях x и y C++
Пожалуйста помогите сделать прогу по с++: Составить программу для вычисления функции b = f(x,y,z), где z = w(x,y) при постоянных значениях х и у
При одном кострукторе вызывется деструктор, при другом нет - почему? C++
Есть класс дерево, в нём вложен класс лист. В подклассе лист есть два конструктора: Node(int key, Node NIL) и Node() #include <iostream> class Tree { public: class Node { public:
C++ Тесты2 http://www.cyberforum.ru/cpp-beginners/thread1311094.html
#include <iostream> using namespace std; class Person { public: Person(); virtual ~ Person();
C++ троичная система чему равняется число 0.6(10 система) в троичной системе? подробнее

Показать сообщение отдельно
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2785 / 1431 / 393
Регистрация: 18.10.2014
Сообщений: 2,629
26.11.2014, 01:58     Подсчёт нулей в двоичном коде
Это не так эффективно, как вариант с вычитанием, но все же

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))'
 
Текущее время: 12:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru