Главная страница
    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-1220271848
md10
2008-09-01 16:24
2008.10.26
об ntfs пропавшем диске


4-1198653645
Rav
2007-12-26 10:20
2008.10.26
Как опеределить язык GUI Windows!!! Не GetSystemDefaultLCID!!!


2-1221626515
AlekseyB
2008-09-17 08:41
2008.10.26
Как сделать сообщение


15-1220249423
oldman
2008-09-01 10:10
2008.10.26
Поздравляю с Днем знаний!


15-1219403756
tesseract
2008-08-22 15:15
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский