Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
ВнизКак произвести логическое уножение чисел Найти похожие ветки
← →
sD © (2008-09-16 15:17) [0]Здравствуйте! Как произвести логическое уножение чисел в бинарном виде в Delphi? Есть ли операция в delphi аналогичная "&" в С++.
Пр. 2&3 = true
1&2 = false
← →
Юрий Зотов © (2008-09-16 15:19) [1]1. AND
2. 2&3 равно 2, а не true.
← →
Правильный$Вася (2008-09-16 15:20) [2]
> 1&2 = false
чего это вдруг не 0 стало false?
← →
Юрий Зотов © (2008-09-16 15:22) [3]> Правильный$Вася (16.09.08 15:20) [2]
Результат - ноль, но это все равно не false. Хотя значение и совпадает, но тип - другой.
← →
Vlad Oshin © (2008-09-16 15:22) [4]var
b:byte;
q:boolean;
b:=1 and 2;
q:=boolean(b);
if q then ShowMessage(inttostr(b));
← →
Правильный$Вася (2008-09-16 15:27) [5]
> Результат - ноль, но это все равно не false
тьфу, это ж побитово... запарился...
ну, в Си 0 - false, не ноль - true
← →
Ega23 © (2008-09-16 15:28) [6]
> чего это вдруг не 0 стало false?
потому, что Boolean = not (Result=0)
← →
Ega23 © (2008-09-16 15:29) [7]
> ну, в Си 0 - false, не ноль - true
А вот одна из фич С, которая лично мне крайне не нравится. В том плане, что все можно проверять на истину-ложь без явного приведения к логическому типу.
← →
han_malign © (2008-09-16 16:15) [8]
> q:=boolean(b);
> if q then ShowMessage(inttostr(b));
........
> потому, что Boolean = not (Result=0)b1:= boolean(2);
b2:= true;
if(b1)then begin
if( not(b1 and b2) )then ShowMessage("Invalid type cast for boolean");
if( b1 <> true )then ShowMessage("Invalid type cast for boolean");
if( not(b1) )then ShowMessage("Invalid type cast for boolean");
end;
← →
Ega23 © (2008-09-16 16:21) [9]
b1:= boolean(2);
потому, что b1:= boolean(2>0);
← →
Ega23 © (2008-09-16 16:24) [10]я может не точно выразился...
В общем, при приведении к Boolean нужно логическое выражение задавать. Т.е.
b1 := not Boolean(2=0).
Только тут приведение нафиг не нужно, и без Boolean сработает...
← →
Правильный$Вася (2008-09-16 16:37) [11]
> одна из фич С, которая лично мне крайне не нравится
а мне нравится
очень изящно, хотя нужно постоянно помнить, чтоб не напортачить
← →
Правильный$Вася (2008-09-16 16:38) [12]собственно, это из той же категории, что char и int - одно и то же, без всяких ord
← →
Ega23 © (2008-09-16 16:44) [13]
> собственно, это из той же категории, что char и int - одно
> и то же, без всяких ord
Ну неправильно это. Есть основные типы: логический, числовой, литеральный и указатель. И должны быть функции приведения между ними.
Ты же не будешь писатьvar
obj : TSomeClass;
b : Boolean;
begin
obj := nil;
b := Boolean(obj);
end;
Ты так и проверишь: if obj=nil then ...
← →
Правильный$Вася (2008-09-16 16:46) [14]
> Ну неправильно это
в каждом языке свои правила :)
можешь даже явно преобразовывать, никто ж не запрещает
← →
Ega23 © (2008-09-16 16:50) [15]
> в каждом языке свои правила :)
> можешь даже явно преобразовывать, никто ж не запрещает
Это потенциальная дырка. Вон, [8] - наглядный пример.
← →
Anatoly Podgoretsky © (2008-09-16 17:06) [16]> Правильный$Вася (16.09.2008 16:38:12) [12]
И отсутствие байт
← →
Vlad Oshin © (2008-09-16 17:25) [17]:)
var
b:byte;
q:boolean;
p1:^boolean;
pb:^byte;
begin
b:=1;
q:=false;
if q
then ShowMessageFmt("%d True",[b])
else ShowMessageFmt("%d false",[b]);
pb:=@b;
p1:=@q;
copymemory(p1,pb,1);
if q
then ShowMessageFmt("%d True",[b])
else ShowMessageFmt("%d false",[b]);
//----------
b:=223;
q:=false;
if q
then ShowMessageFmt("%d True",[b])
else ShowMessageFmt("%d false",[b]);
pb:=@b;
p1:=@q;
copymemory(p1,pb,1);
if q
then ShowMessageFmt("%d True",[b])
else ShowMessageFmt("%d false",[b]);
← →
Правильный$Вася (2008-09-16 17:48) [18]
> И отсутствие байт
а зачем они?
если есть short
← →
Anatoly Podgoretsky © (2008-09-16 18:26) [19]> Правильный$Вася (16.09.2008 17:48:18) [18]
А зачем ты с short сравниваешь, сравнивай с CHAR
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c