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

Побитовые операции с двоичными цифрами - C++

Восстановить пароль Регистрация
 
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
20.06.2013, 22:47     Побитовые операции с двоичными цифрами #1
Вот например наткнулся на такое:
Написать программу , определяющую, содержиться ли в двоичном представлении кода целого числа хотя бы одна пара расположеных рядом 0 , и программу для проверки правильности составленной функции.

Я вообще не представляю, что как подобное реализуется через побитовые операции, не могли бы вы привести хотя бы небольшой кусочек кода с побитовыми операциями с пояснениями, что как и почему
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2013, 22:47     Побитовые операции с двоичными цифрами
Посмотрите здесь:

побитовые операции C++
C++ побитовые операции
ПОБИТОВЫЕ ОПЕРАЦИИ C++
C++ Побитовые операции!
C++ Арифметические операции с двоичными числами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
20.06.2013, 22:59     Побитовые операции с двоичными цифрами #2
Цитата Сообщение от Wladius Посмотреть сообщение
расположеных рядом 0
Рядом С нулём?
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
20.06.2013, 23:04  [ТС]     Побитовые операции с двоичными цифрами #3
"Расположенных рядом нулей", например 1001 - есть одна пара расположенных ярдом нулей
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
20.06.2013, 23:14     Побитовые операции с двоичными цифрами #4
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
38
39
40
41
#include <iostream>
 
typedef unsigned short Byte;
 
int main() {
  setlocale(0, "");
  
  Byte byte;
  
  std::cout << "Введите байт в десятичном представлении: ";
  std::cin >> byte;
  
  int size = sizeof(Byte) * 8, k = 0;
  
  Byte *arr_byte = new Byte[size];
  
  std::cout << "\nВведённый байт в двоичном представлении: ";
  for(int i = size - 1; i >= 0; --i) {
    if(byte & (1 << i)) {
      std::cout << "1";
      arr_byte[k] = 1;
    } else {
      std::cout << "0";
      arr_byte[k] = 0;
    }
    ++k;
  }
  
  int count = 0;
  for(k = 0; k != size; ++k) {
    if(arr_byte[k] == 0 && arr_byte[k + 1] == 0) {
      ++count;
      ++k;
    }
  }
  
  std::cout << "\nПар нулей: " << count << std::endl;
  
  delete[] arr_byte;
  return 0;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,420
21.06.2013, 00:19     Побитовые операции с двоичными цифрами #5
Цитата Сообщение от MarVaL Посмотреть сообщение
for(int i = size - 1; i >= 0; --i) {
* * if(byte & (1 << i)) {
* * * std::cout << "1";
* * * arr_byte[k] = 1;
* * } else {
* * * std::cout << "0";
* * * arr_byte[k] = 0;
* * }
* * ++k;
* }
не видите, что дело можно сократить?
Хотя бы так:
C++
1
2
3
4
for(int i = size - 1; i >= 0; --i) {
    arr_byte[k] = static_cast<bool>(byte & (1 << i));
    std::cout << arr_byte[k++];
}
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
21.06.2013, 00:36     Побитовые операции с двоичными цифрами #6
оно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
bool hasZeroPair(unsigned x)
{
    unsigned mask = 3;
    for (int i = 0; i != 31; ++i, mask <<= 1)
        if ( !(x & mask)  ) return true;
    return false;
}
 
int main()
{
    std::cout << hasZeroPair( (1 << 32) - 1 ) << std::endl
         << hasZeroPair(2863311530) << std::endl
         << hasZeroPair(55);
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2013, 09:50     Побитовые операции с двоичными цифрами
Еще ссылки по теме:

Побитовые операции C++
C++ Арифметичиские операции над двоичными числами
C++ Побитовые операции

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
21.06.2013, 09:50     Побитовые операции с двоичными цифрами #7
если число беззнаковое, то даже разрядность знать не нужно:
C++
1
2
3
4
5
6
int Check(unsigned a)
{
   while (a && (a & 3))
      a >>= 1;
   return !a;
}
Yandex
Объявления
21.06.2013, 09:50     Побитовые операции с двоичными цифрами
Ответ Создать тему
Опции темы

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