Выход из доступного диапазона при использовании побитовой операции - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Тип Byte вмещает в себя 8 бит, в данной программе я узнаю число, как оно выглядит в двоичном коде, Для этого я число 7 (грубо говоря) умножаю на (знак доллара это переход к шестнадцатеричной системе) 8=1000(ДК) + 0=0000(ДК), т. е умножаем на 10000000, если получается то, на что машина умножает ,то пишем единицу, если нет, то 0. Затем смещаем старший бит(после проверки) влево. Вопрос= Почему с типом данных Byte(8бит) выдает, что выходит из доступного диапазона, а если A:Integer, то все компилится нормально и выдает 00000111, что и следовало ожидать. Но блин, ведь Интеджер это 16 бит, а я проверяю 8 бит. Короче, кто понял почему не правильно с Byte, объясните пожалуйста.
Var
  A:Byte;
  I:0..8;
Begin
  A:=7;{00000111}
  For I:=1 to 8 do
    begin
     If (A and $80)=$80 then {00000111 and(*) 10000000 =10000000}
    Write('1')
    Else
    Write('0');
  A:=A shl 1; 
  end;
  ReadLn;
End.        {Esli A:Byte to => exitcode 201, a s integer=компилиться}

Решение задачи: «Выход из доступного диапазона при использовании побитовой операции»

textual
Листинг программы
  mask:=$80;
  For I:=1 to 8 do
    begin
     If (A and mask)<>0 then {00000111 and(*) 10000000 =10000000}
    Write('1')
    Else
    Write('0');
    mask:=mask shr 1; 
  end;

Объяснение кода листинга программы

  1. Переменная mask инициализируется значением $80.
  2. Запускается цикл от 1 до 8.
  3. В каждой итерации цикла выполняется побитовая операция and между переменной A и маской, и результат сравнивается с 0.
  4. Если результат не равен 0, то выводится 1, иначе выводится 0.
  5. После выполнения операции and и вывода результата, маска сдвигается вправо на 1 бит.
  6. Цикл завершается после 8 итераций.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы