Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.26;
Скачать: CL | DM;

Вниз

Как произвести логическое уножение чисел   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
11-1194554434
op_tim_i_st
2007-11-08 23:40
2008.10.26
ЬСЛ + Delphi 2007


15-1220435620
diiimmmmaaaaa
2008-09-03 13:53
2008.10.26
ICQ клиент (выбрать)


2-1221840146
Сергей
2008-09-19 20:02
2008.10.26
Как получить путь к файлу?


2-1221815015
cruiser
2008-09-19 13:03
2008.10.26
Отлов нажатия определенной комбинации клавиш


2-1221992928
voprsest
2008-09-21 14:28
2008.10.26
поиск дочерних окон