Упростить код. Побитовое сравнение 2 чисел - PascalABC.NET
Формулировка задачи:
Доброго времени суток. Ув. программисты, помогите упростить данный код, но без использования массивов, множеств и строк.
Вот сама задача: Сравнить на равенство два двухбайтовых целых числа со знаком путем побитового их сравнения.
Решение задачи: «Упростить код. Побитовое сравнение 2 чисел»
textual
Листинг программы
var a, b, c: smallint; flag: boolean := false; begin c := $8000; readln(a); readln(b); while c <> 0 do if ((a and c) xor (b and c)) <> 0 then begin flag := ((c and $FFFF) = $8000) = ((a and c) <> 0); break; end else c := (c shr 1) and $7FFF; writeln(c = 0 ? '=' : (flag ? '<' : '>')); end.
Объяснение кода листинга программы
- Ввод переменных
a,bиc. Значение переменнойcравно $8000. - Ввод значения переменной
a. - Ввод значения переменной
b. - Запуск цикла while, который выполняется до тех пор, пока значение переменной
cне станет равным 0. - Внутри цикла выполняется условие: если ((a and c) xor (b and c)) не равно 0, то значение переменной
flagустанавливается в true, и цикл прерывается. - Если условие не выполняется, то значение переменной
cуменьшается на 1 с помощью операции сдвига (shr) и маскирования (and $7FFF). - Вывод значения переменной
cв зависимости от результата сравнения: еслиcравно 0, то выводится=, если значение переменнойflagравно true, то выводится<, в противном случае выводится>.