На языке программирования freepascal разработать процедуру вывода на экран битовой структуры оперативной памяти:
procedure bitForm(adr:pointer; bitCount:longword);adr - указатель на начало анализируемого блока оперативной памяти
Биты должны выводиться группами по 8 штук через пробел, от старшего бита к младшему.
Если общее количество битов не кратно 8, то количество бит в последней группе будет меньше 8.
Запрещается при создании процедуры использовать
битовые массивы.
Пример программы, использующей данную процедуру:
var x:word; begin x:=$04FE; bitform(@x,15); end.
Результат работы программы:
11111110 0000010
На языке программирования Си разработать функцию bitForm, аналогичную предыдущей. Проверить ее работоспособность.
void bitForm(unsigned char *adr, unsigned long bitCount);adr - указатель на начало анализируемого блока оперативной памяти
На языке программирования freepascal разработать процедуры установки и сброса единичного бита в оперативной памяти:
procedure bitSet(adr:pointer; bitNumber:longword); procedure bitReset(adr:pointer; bitNumber:longword);adr - указатель на начало блока оперативной памяти
Нумерация битов - от младшего к старшему.
Запрещается при создании процедуры использовать
битовые массивы
Пример программы, использующей данные процедуры:
var x:word; begin x:=$04FE; bitform(@x,15); bitset(@x,0); bitform(@x,15); bitreset(@x,1); bitform(@x,15); bitset(@x,9); bitform(@x,15); end.
Результат работы программы:
11111110 0000010 11111111 0000010 11111101 0000010 11111101 0000011
На языке программирования Си разработать функции bitSet и bitReset, аналогичные предыдущим. Проверить их работоспособность.
void bitSet(unsigned char *adr, unsigned long bitNumber); void bitReset(unsigned char *adr, unsigned long bitNumber);adr - указатель на начало блока оперативной памяти
{$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