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

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

Войти
Регистрация
Восстановить пароль
 
TonyHopkiens
0 / 0 / 0
Регистрация: 26.05.2014
Сообщений: 4
#1

Двоичная обработка данных - C++

30.06.2015, 19:53. Просмотров 233. Ответов 7
Метки нет (Все метки)

Есть такая программа по двоичной обработке массива. Я не совсем понимаю, как здесь менять биты местами, к примеру наложением маски (0х00х0хххххххххх) поменять местами 1 и 3 бит с 4 и 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# include <stdio.h> 
# include <string.h> 
# include <stdlib.h>
void tobit(int);
  char s[17]={"0000000000000000"};   int b,a1;
main ()
{
 int a[5]={1528,5184,10822,3555,1234},*sum=NULL;   unsigned char j;
  sum=(int*) malloc (2);//выделяем два байта памяти
  if (!sum)
    {printf("no memory");
     exit(0);
    }
  printf("исходный массив \n");
    for (j=0;j<5;j++)
     { printf("%u   ",a[j]);
      *sum=*sum+a[j]; } 
printf("сумма %d\n",*sum);
sum=NULL;
printf("обработка \n");
  for (j=0;j<5;j++)   { a1=a[j];  tobit(a[j]);
  
a1=a[j]&19455;
  b=a[j]>>15;
  b=b<<12;
  
a1=a1|b;
  b=a[j]>>12;
  b=b<<15;
  
a1=a1|b;
  b=a[j]&8192;
  b=b>>3;
  
a1=a1|b;
  b=a[j]&1024;
  b=b<<3;
  
a1=a1|b;
  *sum=*sum+a1;
  tobit(a1);
  } printf("новая сумма %d\n",*sum);
  scanf("d");
  *sum=NULL;
}
void tobit(int a)
{ char i;
  printf("%d  ",a);
  for (i=0;i<16;i++)
   { b=a1&32768;
     if (!b) s[i]='0';
      else s[i]='1';
     a1=a1<<1;
   }
  puts(s);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2015, 19:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двоичная обработка данных (C++):

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

Двоичная система - C++
Нужно написать программу на СИ(не на си++), чтоб та Представляла заданное число в двоичной системе . Заранее спасибо

двоичная система - C++
перевод из десятичной в двоичную скажите как записать результат в обратном порядке!! #include &lt;iostream&gt; #include &lt;string&gt; using...

Двоичная система счисления - C++
Всем привет.Нужна помощь.Осваиваю язык. Пытаюсь написать программу перевода в двоичную систему счисления. Что делаю не так? ...

Двоичная(бинарная) сортировка - C++
Бегло прочел про эту сортировку и понял что она ориентирована на числовые заранее отсортированные массивы. А возможно ли ней например...

Двоичная система счисления - C++
как написать програму которая переводить цифру в двоичну систему счисления.c++

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
30.06.2015, 20:20 #2
Цитата Сообщение от TonyHopkiens Посмотреть сообщение
к примеру наложением маски (0х00х0хххххххххх) поменять местами 1 и 3 бит с 4 и 6 битами соответственно.
Поясни пример. Мне не понятна связь между маской и номерами бит.
Байт
Эксперт C
15982 / 10250 / 1536
Регистрация: 24.12.2010
Сообщений: 19,332
30.06.2015, 20:21 #3
C++
1
2
3
4
5
6
7
8
9
10
int GetBit(int a, int k) // Взять k-й бит числа
{
   return a & (1<<k);
}
int SetBit(int a, int k, bool b)  // Установить k-й бит в b
{
   a = a & (~(1<<k));  // Обнуление бита
   if (b) a |= (1<<k);
   return a;
}
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
30.06.2015, 20:36 #4
Байт, у него же биты представлены в виде строки символов.
Байт
Эксперт C
15982 / 10250 / 1536
Регистрация: 24.12.2010
Сообщений: 19,332
30.06.2015, 20:51 #5
Цитата Сообщение от castaway Посмотреть сообщение
у него же биты представлены в виде строки символов
Но работает-то он с целыми элементами массива a.
Еще в строке 43 scanf("d') - явная ошибка.
Вообще код путанный и разбирать его - себе дороже.
Я просто показал, как вытащить и установить бит в целом числе, а дальше пусть сам разбирается.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
30.06.2015, 20:53 #6
Байт, согласен. Не спорю.
TonyHopkiens
0 / 0 / 0
Регистрация: 26.05.2014
Сообщений: 4
30.06.2015, 21:37  [ТС] #7
Задание: Для числа целого типа (16 бит) выполнить двоичную обработку с обязательным применением функций:
поменять местами 1 и 3 бит с 4 и 6 битами соответственно.

Но у меня есть только эта программа без всяких пояснений как пример.
Геомеханик
617 / 424 / 308
Регистрация: 26.06.2015
Сообщений: 959
01.07.2015, 10:24 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//индексация бит с нуля
unsigned short swap_bit(unsigned short n, int i, int j){
    unsigned short a = (n >> i) & 1;
    unsigned short b = (n >> j) & 1;
 
    n &= ~(1 << i);
    n &= ~(1 << j);
    return n | (a << j) | (b << i);
}
 
//...
 
unsigned short n = 0x15;
n = swap_bit(n,  0, 3);
n = swap_bit(n,  2, 5);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2015, 10:24
Привет! Вот еще темы с ответами:

алгоритм двоичная вставка - C++
Приведите программную реализацию алгоритма сортировки методом двоичной вставки. Получите для неё эмпирические оценки функции роста...

Двоичная быстрая сортировка - C++
всем здарасте) В общем мне задали курсовую работу написать на С++, тема очень странная &quot;Двоичная быстрая сортировка&quot;((((.... Я пошустрил...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.07.2015, 10:24
Ответ Создать тему
Опции темы

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