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

Работа с битами. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Методы поиска в различных структурах данных http://www.cyberforum.ru/cpp-beginners/thread219093.html
у мя просьба,есть ли методы поиска???(с++/алгоритмы):read: 1)Таблица символов, 2)Деревья бинарного поиска, 3)Хеширование. заранее спс......
C++ С++/Сортировка слияние/(Что выполняет...?;(плз)/ Большая просьба,помоги мне ответить Это пирамидальная сортировка с++ Заранее спасибо #include<conio.h> #include <stdio.h> #include <stdlib.h> #include <time.h>// Что выполняет? http://www.cyberforum.ru/cpp-beginners/thread219089.html
C++ польская запись,нашел какой то код
char * pol(char * in, char * out) { st *OPR=NULL; int k,point; k=point=0; while(in!='\0' && in!='=') // пока не дойдем до равно '=' { if(in==')') // если очередный символ - ')' { while((OPR->c)!='(') // то удаляем из стека в
Наследование классов C++
Создайте исходный базовй класс building для хранения числа этажей и комнат в здании, а также общую площадь комнат. Создайте класс house, который наследует класс building и хранит число ванных комнат и число спален. Создайте произвольный класс office, который наследует класс building и хранит число огнетушителей и телефонов. Создайте объекты указанных классов, заполните их данными и, с помощью...
C++ Проблема с массивами http://www.cyberforum.ru/cpp-beginners/thread219078.html
#include <iostream> #include <cstdlib> #include <ctime> #include<fstream> using namespace std; ofstream fl; void f1 (const int *s, const int *rmin, const int *rmax, int *p) {
C++ c++/newbies 7. Информация об участниках спортивных соревнований содержит наиме- нование страны, название команды, ФИО игрока, игровой номер, возраст, рост и вес. Вывести информацию о самой молодой команде. #include "stdafx.h" #include <iostream> #include <string> using namespace std; int main() { подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
23.12.2010, 22:26     Работа с битами.
Здрасте.
Задача явно на битовые операторы. Сдвигайте вправо число, пока оно больше нуля, и сравнивайте первый бит с единицей (логическим И 1). Если 0 вычитаем единицу, если 1 -- добавляем. Если результат положительный -- единиц больше, если результат отрицательный -- нулей больше, если 0 -- поровну.
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
34
35
36
37
/*
  Определить на сколько в числе А больше значащих битов, что равны единице,
  чем битов, что равны нулю. Помогите пожалуйста. 
*/
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <ctime>
 
const signed int bits_diff(const int &a_number) {
  int result = 0;
  int temporary_number = a_number;
  while (temporary_number > 0) {
    result += ((temporary_number & 1)?1:-1);
    temporary_number = temporary_number >> 1;
  }
  return result;
}
 
int main(int argc, char *argv[]) {
  srand(static_cast<unsigned int>(time(NULL)));
  int a_number = rand();
  int bits_differs = bits_diff(a_number);
  printf("%d ", a_number);
 
  if (bits_differs > 0)
    printf("has %d more 1, than 0.\n", bits_differs);
  else
  if (bits_differs < 0)
    printf("has %d more 0, than 1.\n", -bits_differs);
  else
    printf("has same number of 0 and 1.\n");
 
  int exit_key;
  scanf("%d", &exit_key);
  return 0;
}
 
Текущее время: 10:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru