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

Битовые операции - C++

Восстановить пароль Регистрация
 
Sasha 93
2 / 2 / 0
Регистрация: 28.11.2012
Сообщений: 39
29.09.2013, 23:31     Битовые операции #1
Составить две программы, первая из которых вводит составные части структуры данных, и формирует из них заданную упакованную структуру. Вторая программа вводит упакованную структуру как 16-ричной число и выводит значения отдельных ее составных частей.
Слово состояния канала в вычислительной системе представляется в виде:
розряду 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Значення N N N N E C C C C C C C C C 0 P


де:
N..N - Номер канала
E - Признак ошибки
C..C - код причини преривания
P - признак завершения программы в канале




Вот у меня есть пример похожей задачи, но я не могу его подогнать к своему.=(

Слово состояния устройства в системе ввода-вывода представляется в виде:
разряда 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Значение C C C C C 0 F B N N N N N N N N
*
где
C.. C - код состояния
F - признак ошибки (1/0)
B - признак занятости (0/1)
N.. N - количество байт, переданных в последний операции

Программа ввода:
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
#include <stdio.h>
int main(void) {
 char c; /* код состояния */
 char f; /* признак ошибки */
 char b; /* признак занятости */
 unsigned char n; /* количество байт */
 unsigned int UnitStateWord; /* слово состояния */
  /* ввод составных частей */
  printf("Введите код состояния (0 - 31) >");
  scanf("%d",&c);
  printf("Введите признак ошибки (0 / 1) >");
  scanf("%d",&f);
  printf("Введите признак занятости (0 / 1) >");
  scanf("%d",&b);
  printf("Введите количество переданных байт (0 - 255) >");
  scanf("%d",&n);
  /* формирование упакованного кода */
  UnitStateWord=((unsigned int)c&0x1F)<<11;
  UnitStateWord|=((unsigned int)f&1)<<9;
  UnitStateWord|=((unsigned int)b&1)<<8;
  UnitStateWord|=n&0xFF;
  /* вывод результата */
  printf("\nСлово состояния устройства = %04x\n",
     UnitStateWord);
  return 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
#include <stdio.h>
int main(void) {
 char c; /* код состояния */
 char f; /* признак ошибки */
 char b; /* признак занятости */
 unsigned char n; /* количество байт */
 unsigned int UnitStateWord; /* слово состояния */
  /* ввод слова состояния устройства */
  printf("Введите cлово состояния устройства \n");
  printf("(16-ричное число от 0 до 0xFFFF) >");
  scanf("%x",&UnitStateWord);
  /* Выделение составных частей */
  c=(UnitStateWord>>11)&0x1F;
  f=(UnitStateWord>>9)&1;
  b=(UnitStateWord>>8)&1;
  n=UnitStateWord&0xFF;
  /* вывод результатов */
  putchar('\n');
  printf("Код состояния                  = %d\n",c);
  printf("Признак ошибки             = %d\n",f);
  printf("Признак занятости          = %d\n",b);
  printf("Количество переданных байт = %d\n",n);
  return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2013, 23:31     Битовые операции
Посмотрите здесь:

битовые операции C++
C++ Битовые операции
Битовые операции C++
Битовые операции C++
Битовые операции C++
C++ Битовые операции
C++ Битовые операции
Битовые операции C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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