Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];

Вниз

Фишка   Найти похожие ветки 

 
Дмитрий С   (2008-05-18 14:02) [0]

Может боян...

program Project2;
{$APPTYPE CONSOLE}
var
 b: Boolean;
begin
 b := boolean(2);

 if b = true
 then writeln("1")
 else writeln("0"); //  <-

 if b = false
 then writeln("1")
 else writeln("0"); //  <-

 if b
 then writeln("1")  //  <-
 else writeln("0");

 readln;
end.


 
Renegat   (2008-05-18 14:16) [1]

Ну а что, реакция вполне адекватная. При проверки типа if b используется, еснеошибаюсь, связка TEST+JE. 2!=1, 2!=0...


 
guav ©   (2008-05-18 14:18) [2]

Ну да, есть такое. Выводы:

Следует использовать ByteBool, WordBool, LongBool там где true не всегда 1. С ByteBool будет всё правильно.
Следует избегать сравнений с true.
Следует избегать конструкций const flags: array[Boolean] of там, где индекс получается из внешних данных.
При записи бинарных данных в файл/в поток лучше брать ByteBool, WordBool, LongBool, а не Boolean.


 
Дмитрий С   (2008-05-18 14:18) [3]


> Renegat   (18.05.08 14:16) [1]

Понятно, что адекватная, а вот новичков пугать классно=)


 
Умище   (2008-05-18 14:18) [4]

Boolean Types
The four predefined Boolean types are Boolean, ByteBool, WordBool, and LongBool. Boolean is the preferred type. The others exist to provide compatibility with other languages and operating system libraries.

A Boolean variable occupies one byte of memory, a ByteBool variable also occupies one byte, a WordBool variable occupies two bytes (one word), and a LongBool variable occupies four bytes (two words).

Boolean values are denoted by the predefined constants True and False. The following relationships hold.
Boolean  ByteBool, WordBool, LongBool  
False < True
False <> True

Ord(False) = 0
Ord(False) = 0

Ord(True) = 1
Ord(True) <> 0

Succ(False) = True
Succ(False) = True

Pred(True) = False
Pred(False) = True


A value of type ByteBool, LongBool, or WordBool is considered True when its ordinality is nonzero. If such a value appears in a context where a Boolean is expected, the compiler automatically converts any value of nonzero ordinality to True.

The previous remarks refer to the ordinality of Boolean values, not to the values themselves. In Delphi, Boolean expressions cannot be equated with integers or reals. Hence, if X is an integer variable, the statement
if X then ...;
generates a compilation error. Casting the variable to a Boolean type is unreliable, but each of the following alternatives will work.
if X <> 0 then ...; { use longer expression that returns Boolean value }
         
var OK: Boolean;
...
if X <> 0 then OK := True;
if OK then ...;


 
Умище   (2008-05-18 14:20) [5]

Но неприятно, конечно.

И чему же равно b в результате-то?-)


 
Умище   (2008-05-18 14:22) [6]

А в результате Boolean-переменная может принимать 256 значений...-0)


 
Дмитрий С   (2008-05-18 14:23) [7]

boolean(2); чему ж еще =)


 
Renegat   (2008-05-18 14:23) [8]

Главное, что b не равно FALSE. => оно равно TRUE!


 
Дмитрий С   (2008-05-18 14:24) [9]

if b = true
then writeln("1")
else writeln("0"); //  <- 0


 
Renegat   (2008-05-18 14:29) [10]

С точки зрения конструкции if b и опкода TEST всё что не false - то true... я вот об чём. Но "официально", оно конечно, не true. Предлагаю ввести новое обозначение: True-UNORM =)


 
Дмитрий С   (2008-05-18 14:34) [11]

Я думаю дело в том, что при сравнении boolean-а сравниваются байты.
false = boolean(0);
true = boolean(1);
b = boolean(2); потому и не равно =)


 
Anatoly Podgoretsky ©   (2008-05-18 16:24) [12]

> Дмитрий С  (18.05.2008 14:23:07)  [7]

Ерунде равно.


 
may be I am noob... ©   (2008-05-18 17:31) [13]

а вообще смысл испытывать bool?


 
_mirage   (2008-05-18 17:45) [14]

>[13] may be I am noob... © (2008-05-18 17:31:00)
just for fun.

---
Understanding is not required. Only obedience.


 
DiamondShark ©   (2008-05-18 22:57) [15]


>  b := boolean(2);

А ещё классные фишки дают операторы
TObject(2).Free;
TForm(2).Show;


 
Дмитрий С   (2008-05-19 00:08) [16]

Что же кроме AV они могут дать?


 
@!!ex ©   (2008-05-19 00:27) [17]

> [16] Дмитрий С   (19.05.08 00:08)

Это был стеб, если вы не поняли.

ПРиведенные примеры настолько же "правильные" как и ваш пример.


 
Дмитрий С   (2008-05-19 00:56) [18]


> ПРиведенные примеры настолько же "правильные" как и ваш
> пример.

Возможно, но не столь интересны=)


 
@!!ex ©   (2008-05-19 07:24) [19]

> [18] Дмитрий С   (19.05.08 00:56)

Ну вас же не удевляет, что в ситуации:
i:shortint;
i:=byte(200);

i будет меньше 0.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.051 c
15-1210823426
Капибара из дома
2008-05-15 07:50
2008.06.29
Настройка приоритета для приложения


15-1210752135
Петр
2008-05-14 12:02
2008.06.29
Проблема с установкой Касперского


2-1212521913
alex-drob
2008-06-03 23:38
2008.06.29
налажение памяти в структуре с динамическим масивом


6-1189766837
artem779
2007-09-14 14:47
2008.06.29
IdMessage


3-1201071521
O.O
2008-01-23 09:58
2008.06.29
Изменение вычисляемого поля





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