Форум: "Прочее";
Текущий архив: 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.042 c