Programs
Вариант 3
Главная
Код данной программы предназначен только для VS. В Dev-C она будет работать некорректно из-за затирания переменных.
Здесь ошибка
Код:
#include "stdafx.h" #include #include #include void unpack() { unsigned char n = 0, e = 0, p =0; unsigned int c = 0, UnitStateWord= 0; printf_s(" Введите 16-ричное число от 0 до FFFF "); scanf_s("%x", &UnitStateWord); n = (UnitStateWord >> 12) & 0xF; e = (UnitStateWord >> 11) & 0x1; c = (UnitStateWord >> 2) & 0x1FF; p = UnitStateWord & 0x1; printf_s(" Номер канала = %d\n", n); printf_s(" Признак ошибки = %d\n", e); printf_s(" Код причины прерывания = %d\n", c); printf_s(" Признак завершения программы в канале = %d\n", p); } void pack() { unsigned char n,e,p; unsigned int c = 0, UnitStateWord = 0; printf_s("Введите номер канала (0-15) >"); scanf_s("%hhd", &n); UnitStateWord = (n & 0xF) << 12; printf_s("\n Результат = %04x\n", UnitStateWord); printf_s("Введите признак ошибки (0 - 1) >"); scanf_s("%hhd", &e); UnitStateWord |= (e & 0x1) << 11; printf_s("\n Результат = %04x\n", UnitStateWord); printf_s("Введите код причины прерывания (0 - 511) >"); scanf_s("%d", &c); UnitStateWord |= (c & 0x1FF) << 2; printf_s("\n Результат = %04x\n", UnitStateWord); printf_s("Признак завершения программы в канале (0 - 1) >"); scanf_s("%hhd", &p); UnitStateWord |= p & 1; printf_s("\n Результат= %04x\n", UnitStateWord); } int main() { setlocale(LC_ALL, "RUSSIAN"); pack(); unpack(); system("pause"); return 0; }