Лабораторная 3. Битовая структура данных

  1. Разработать процедуру вывода на экран битовой структуры оперативной памяти:
    procedure bitForm(var data; bitCount:longword);
    data - анализируемый блок оперативной памяти
    bitCount - количество анализируемых битов

    Биты должны выводиться группами по 8 штук через пробел, от старшего бита к младшему.
    Если общее количество битов не кратно 8, то количество бит в последней группе будет меньше 8.
    Для решения задачи рекомендуется использовать битовые операции.
    Запрещается использовать строки и строковые функции, битовые структуры (битовые массивы, побитно упакованные записи и т.п.).

    Пример программы, использующей данную процедуру:

    var x:word;
    begin
     x:=$04FE;
     bitform(x,15);
    end.
    

    Результат работы программы:

    11111110 0000010
    
  2. Разработать процедуры установки и сброса единичного бита в оперативной памяти:
    procedure bitSet(var data; bitNumber:longword);
    procedure bitReset(var data; bitNumber:longword);
    
    data - блок оперативной памяти
    bitNumber - устанавливаемый или сбрасываемый бит

    Нумерация битов - от младшего к старшему.

    Для решения задачи рекомендуется использовать битовые операции.
    Запрещается использовать строки и строковые функции, битовые структуры (битовые массивы, побитно упакованные записи и т.п.).

Пример решения, с использованием битовых структур, запрещенных по условию задачи:
{$mode objfpc}
type TBitArray=bitpacked array[0..high(longword)-1]of 0..1;

procedure bitForm(var data; bitCount:longword);
 var x:TBitArray absolute data;
     i,index:longint;
begin
 for i:=0 to bitcount-1 do begin
    index:=(7-(i mod 8))+8*(i div 8);
    write(x[index]);
    if ((i+1) mod 8)=0 then write(' ');
 end;
 writeln;
end;


procedure bitSet(var data; bitNumber:longword);
 var x:TBitArray absolute data;
begin
 x[bitNumber]:=1;
end;

procedure bitReset(var data; bitNumber:longword);
 var x:TBitArray absolute data;
begin
 x[bitNumber]:=0;
end;

var x:word;
begin
 x:=$04FE;
 bitform(x,15);

 bitSet(x,0);
 bitform(x,16);

 bitReset(x,7);
 bitform(x,16);

 bitSet(x,14);
 bitform(x,16); 
end.
Результат запуска программы:
11111110 0000010
11111111 00000100
01111111 00000100
01111111 01000100