Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Dreeni
50 / 2 / 1
Регистрация: 02.06.2013
Сообщений: 146
Записей в блоге: 2
#1

Работа с двоичным кодом - C++

14.03.2015, 18:38. Просмотров 185. Ответов 0
Метки нет (Все метки)

Если в числе встречается последовательность битов 000, заменить её на 0110 (лишние разряды сдвигать влево)
Вот написал код
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
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main(void)
{
   unsigned int dec, bin, siz;
   unsigned int mask1, mask2;
   int i;
   srand(time(NULL));
   dec=rand(); //Переменной dec присваивается случайное число
   siz=sizeof(dec); //Присваиваем переменной siz размер (в байтах) переменной dec
   cout<<"случайное число " << dec;
   cout<<" в двоичном коде:\n";
   for(i=siz*8-1;i>=0;i--) /*цикл выводящий двоичное представления случайного числа записаного в переменной dec*/
   {
      bin=(dec>>i)&1;
      cout<< bin;
   }
   cout<<"\nПреобразование выполнена:\n";
   mask1=7; //Создаём маску с единицами в трёх крайних правых битах
   mask2=6; //Создаём маску с единицами в 2 и 3 битах
   for(i=1;i<=(siz*8)-1;i++) /*задаём цикл выполняющийся столько раз сколько битов*/ 
   {
      if((dec^mask1)==(mask1)) //поиск 000 
         {
             dec=dec&0|mask2;
         }
         mask1=mask1<<1; 
         mask2=mask2<<1; //сдвигаем маски на 1 бит влево для продолжения поиска 000
         }
   for(i=siz*8-1;i>=0;i--) //цикл выводящий результат преобразования двоичного числа
   {
        bin=(dec>>i)&1;
        cout<< bin;
   }
   return 0;
Не получается, помогите выполнить это задание, я не знаю как сделать так, что бы он искал три нуля, и менял их на 0110.
проблема у меня возникла в этом блоке
C++
1
2
3
4
5
6
7
8
9
10
11
   mask1=7; //Создаём маску с единицами в трёх крайних правых битах
   mask2=6; //Создаём маску с единицами в 2 и 3 битах
   for(i=1;i<=(siz*8)-1;i++) /*задаём цикл выполняющийся столько раз сколько битов*/ 
   {
      if((dec^mask1)==(mask1)) //поиск 000 
         {
             dec=dec&0|mask2;
         }
         mask1=mask1<<1; 
         mask2=mask2<<1; //сдвигаем маски на 1 бит влево для продолжения поиска 000
         }
Добавлено через 2 минуты
Была у меня прога, очень похожа, только там нужно было перебирать соседние группы из 3х битов(триплёты), и если они одинаковы то, инвертировать младший бит старшего триплета, и старший бит младшего триплёта.
программа одинакова, только блок в котором я запоролся выглядит так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
   mask1=7; //Создаём маску с единицами в трёх крайних правых битах
   mask2=12; //Создаём маску с единицами в 3 и 4 битах
   for(i=1;i<=(siz*8/3)-1;i++) /*задаём цикл выполняющийся столько раз сколько пар соседних триплётов в двоичном 
   представлении числа*/ 
   {
      if((dec&mask1)==((dec&(mask1<<3))>>3)) //сравниваем соседнии триплеты 
         {
             dec^=mask2; /*если соседнии триплеты совпадают то инвертируется младший бит старшего
             триплета и старший бит младшего триплета*/
         }
         mask1=mask1<<3; 
         mask2=mask2<<3; //сдвигаем маски на 3 бита влево для продолжения поиска сосдедних пар триплетов
         }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2015, 18:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с двоичным кодом (C++):

работа с двоичным кодом - C++
Задача не сложная но материала на ту тему Я на просторах интернета так и не нашел( Через небольшую программку (самопальный HEX ридер) Я...

Работа с двоичным файлом - C++
Ребят помогите. Создать двоичный файл и записать в него степени числа 3. Вывести на экран компоненты файла с четным порядковым номером....

Работа с двоичным файлом: Перевести содержание файла в поток байт - C++
Существует файл D:\proba.txt в себе он содержит: 68 11 00 00 00 00 71 00 00 00 09 01 C8 01 00 00 01... Он довольно таки длинный до 253...

Работа с пролог кодом из среды С++ - C++
Добрый вечер. Мне дали задание в университете реализовать работу с Prolog кодом из среды С++. И есть инструкция как с помощью...

Сортировка двоичным включением - C++
У меня задание продемонстрировать в виде таблицы алгоритм роботы сортировки с двоичным включением на массиве 15,4,10,8,6,9,16,1.Написал...

Задача с двоичным поиском в упорядоченном массиве - C++
Может, кто с кодом помочь и комментариями. Дан упорядоченный по неубыванию целочисленный массив и набор чисел ki. Требуется для...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2015, 18:38
Привет! Вот еще темы с ответами:

Маленькая программка - вопрос по двоичным числам. - C++
Наткнулся на это. Подскажите как добавить в функционал программки еще и двоичные числа.. PS. хз, но точно не &quot;bin&quot; :) #include...

Нужно разобраться с двоичным представлением файла - C++
написал такую программу которая сначала определяет размер файла, после создает массив такого же размера, после этого по задумке я должен...

Поиск элемента массива прямым и двоичным способом - C++
Написать программу поиска элемента массива 2 способами: прямым и двоичным поиском. Массив нужно задать с помощью srand. Перед поиском...

Определить, является ли введённая с клавиатуры строка двоичным числом - C++
Задание: Напишите программу, которая определяет, является ли введённая с клавиатуры строка двоичным числом. Люди помогите пожалуйсто...


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

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

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