Страница 2 из 2
Re: Вопросы по теме книги
Добавлено: 14.09.2012 09:55:33
Oleg_D
Испытайте эту программку, откомпилировав FPC.
Код: Выделить всё
var S : AnsiString; T : String;
BEGIN
S:= 'AnsiString'; T:= 'String';
Writeln(SizeOf(S)); { 4 }
Writeln(SizeOf(T)); { 256 }
Readln;
END.
Дело в том, что переменные типа AnsiString - это указатели. Вообще, прежде чем делать что-то со строкой, составьте себе чёткое представление, с каким именно типом вы работаете.
А возвращаясь к FillChar, добавлю, что процедура эта трактует заполняемую область памяти как некий массив байтов, без учёта типа. На практике её лучше применять к массивам и записям (структурам).
Re: Вопросы по теме книги
Добавлено: 16.12.2012 11:37:31
Paster Fob
Олег Виленович.Не могу никак разобраться.
Глава 48
Совместив сдвиг с логическими операциями, можно исследовать отдельные биты слова. Перед вами булева функция TestBit, принимающая два параметра:ARG — число, в котором проверяется состояние некоторого бита, и BIT — номер этого бита. Функция возвращает TRUE, если проверяемый бит содержит единицу, и FALSE в противном случае.
Код: Выделить всё
function TestBit (arg: longint; bit : byte): Boolean;
begin
TestBit := (arg and (1 shl bit)) <> 0
end;
Исходя из выше сказанного пишу такой вот код для проверки функции.
Код: Выделить всё
function testbit(arg:integer;bit:byte):boolean;
begin
testbit:=(arg and (1 shl bit))<>0;
end;
var
num:longint;i:byte;
s:string;c:char;
begin
readln(num);
for i:=8 downto 1 do
if testbit(num,i) then
write(1)
else
write(0);
writeln;
s:='';
for i:=1 to 8 do begin
c:=char ((num mod 2)+ord('0'));
s:=c+s;
num:=num div 2;
end;
writeln(s);
readln
end.
Ввёл я например число 5 в отве получил 00000010 хотя должно быть 00000101
Так что я не понял,в чём смысл функции?
Я так понимаю что двоичное представление числа,это и есть биты.Т.е. получается что 8-ой бит содержит 1; 7 => 0 ; 6 => 1 ; остальные 0.Но функция показывает совсем другое.Или я что-то попутал и не так понял?
Re: Вопросы по теме книги
Добавлено: 16.12.2012 11:42:10
bormant
for i:=7 downto 0 do ...
потому как младший бит 0-й, для его проверки 1 сдвигать влево не нужно (1 shl bit).
Re: Вопросы по теме книги
Добавлено: 16.12.2012 12:08:36
Oleg_D
Меня опередили

Да, у программистов принято нумеровать биты с нуля, проверил, работает. Можно будет в книжке сказать об этом.
Re: Вопросы по теме книги
Добавлено: 16.12.2012 13:15:17
bormant
По поводу "нумеровать с 0" -- программистам обычно удобнее оперировать не порядковым номером, а смещением от базы, отсюда и 0.
Re: Вопросы по теме книги
Добавлено: 16.12.2012 13:55:40
Oleg_D
bormant писал(а):По поводу "нумеровать с 0" -- программистам обычно удобнее оперировать не порядковым номером, а смещением от базы, отсюда и 0.
Так я и говорю -- привычка уже. Один знакомый программист, заполняя анкету, в графе "количество детей" так и написал:
0. Кадровичка долго "въезжала", что это значит, потом потребовала: напиши "
нет".

Re: Вопросы по теме книги
Добавлено: 16.12.2012 15:34:28
Vadim
Oleg_D писал(а): потом потребовала: напиши "
нет".

И тогда он написал:

Re: Вопросы по теме книги
Добавлено: 17.12.2012 15:33:47
Paster Fob
bormant писал(а):for i:=7 downto 0 do ...
потому как младший бит 0-й, для его проверки 1 сдвигать влево не нужно (1 shl bit).
Oleg_D писал(а):Да, у программистов принято нумеровать биты с нуля, проверил, работает. Можно будет в книжке сказать об этом.
Всё ясно,значит я всё правильно понял.Только о нумерации не подумал.