Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1219403756
tesseract
2008-08-22 15:15
2008.10.26
Футболочки :-) Чего-то вспомнилось.


2-1221668340
Drowsy
2008-09-17 20:19
2008.10.26
Как из базы IB вытянуть список несистемных таблиц?


2-1221715346
Matveih1
2008-09-18 09:22
2008.10.26
Как предотвратить повторный запуск формы?


15-1220412091
Slider007
2008-09-03 07:21
2008.10.26
С днем рождения ! 3 сентября 2008 среда


2-1221740702
Cosinus
2008-09-18 16:25
2008.10.26
Как запретить показ системного меню?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский