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