Текущий архив: 2009.01.25;
Скачать: CL | DM;
Вниз
В чем разница между переменными типа bool и boolean? Найти похожие ветки
← →
demon © (2008-11-29 18:27) [0]Sabj
← →
@!!ex © (2008-11-29 18:37) [1]языки разные. вообще с некоторыми оговорками эти типы можно считать одинаковыми.
← →
tesseract © (2008-11-29 18:40) [2]bool = longbool в delphi - являеться в сучности integer
← →
Тын-Дын © (2008-11-29 18:42) [3]
> В чем разница между переменными типа bool и boolean?
Сравни SizeOf()
← →
Anatoly Podgoretsky © (2008-11-29 18:49) [4]> demon (29.11.2008 18:27:00) [0]
В справке описано, но кратко xBool не логический тип, а арифметический, используемый в недоязыках, как эквивалент логического. В Дельфи для поддержки АПИ введена ограниченая поддержка и его.
← →
Anatoly Podgoretsky © (2008-11-29 18:51) [5]> Тын-Дын (29.11.2008 18:42:03) [3]
Зачем, это же производный (generic) тип и его длина меняется.
← →
demon © (2008-11-29 18:53) [6]> Сравни SizeOf()
bool - 4
boolean - 1
теперь ясно, буду boolean использовать.
← →
isasa © (2008-11-29 18:53) [7]
Windows Data Types
BOOL Boolean variable (should be TRUE or FALSE).
This type is declared in WinDef.h as follows:
typedef int BOOL;
BOOLEAN Boolean variable (should be TRUE or FALSE).
This type is declared in WinNT.h as follows:
typedef BYTE BOOLEAN;
← →
DVM © (2008-11-29 18:54) [8]
> теперь ясно, буду boolean использовать.
Почему? И где?
← →
@!!ex © (2008-11-29 19:02) [9]ааа. речь о дельфевом bool. тогда да, 4 байта против 1.
← →
Anatoly Podgoretsky © (2008-11-29 19:05) [10]> demon (29.11.2008 18:53:06) [6]
Плохое сравнение.
← →
Anatoly Podgoretsky © (2008-11-29 19:06) [11]> isasa (29.11.2008 18:53:07) [7]
Ну так приходится расплачиваться за грехи предыдущих поколений
← →
demon © (2008-11-29 19:08) [12]из [7] вытекает что программа исползующая boolean не будет работать в 9x системах, верно?
← →
@!!ex © (2008-11-29 19:10) [13]> [12] demon © (29.11.08 19:08)
Да нет, с чего бы?
← →
Anatoly Podgoretsky © (2008-11-29 19:11) [14]> DVM (29.11.2008 18:54:08) [8]
И еще вопрос
Зачем и как?
← →
demon © (2008-11-29 19:13) [15]
> Да нет, с чего бы?
> declared in WinNT.h
← →
benito (2008-11-29 19:16) [16]demon © (29.11.08 19:13) [15]
http://www.ozon.ru/context/detail/id/2967330/
← →
Anatoly Podgoretsky © (2008-11-29 19:16) [17]А если будет написано
> declared in abc.h
то это будет означать, что под Виндоус работать не будет, только под abcOS
← →
Григорьев Антон © (2008-12-01 08:57) [18]В C и C++ нет отдельного логического типа, он получается из целых чисел, причём любое ненулевое значение считается истиной, нулевое - ложью. Из-за различной разрядности исторически появились "фундаментальные" ByteBool, WordBool и LongBool, устроенные по одному принципу, но отличающиеся разрядностью, и Bool - обобщённый тип, разрядность которого совпадает с разрядностью платформы, т.е. для Win32 Bool = LongBool.
В Паскале есть встроенный логический тип Boolean, который занимает 1 байт и принимает значения True (1) и False (0), прочие значения компилятором не допускаются. Это тоже исторически сложилось.
Так как API Windows в качестве логических типов использует типы C/C++, в Delphi для совместимости введена поддержка этих типов. Они могут использоваться там, где используется Boolean, и компилятор неявно выполняет необходимые преобразования.
← →
inoremap (2008-12-01 09:09) [19][18]> В C нет отдельного логического типа
fixed
← →
Anatoly Podgoretsky © (2008-12-01 10:36) [20]> Григорьев Антон (01.12.2008 8:57:18) [18]
Не только из чисел, практически все является логическим типом, например значения функций, сами функции, выражения, операции и так далее, одним словом все.
← →
Anatoly Podgoretsky © (2008-12-01 10:36) [21]> inoremap (01.12.2008 9:09:19) [19]
Не fixed, а Masked
← →
int64 (2008-12-01 11:00) [22]У меня при приведении Bool к Boolean компилятор выдывал internal errror. Delphi7. Ругался на простую запись:
if BoolValue then
Когда я переписал на if BoolValue = True then, провалы прекратились.
С тех пор у меня фобия по использованию Bool.
Еще не понятно, как Д сравнивает эти типы между собой. Когда они не 0, они же всеравно могут не равнятся друг другу. Например: первый 1, второй 10. Это можно использовать, как "многозначную" логику.
Но вдруг Д принудительно конвертит все "True" типа LongBool к 1, например, через неявные/невидимые приведения к Boolean.
Проверить не было времени.
← →
KSergey © (2008-12-01 12:49) [23]> int64 (01.12.08 11:00) [22]
> Еще не понятно, как Д сравнивает эти типы между собой. Когда
> они не 0, они же всеравно могут не равнятся друг другу.
> Например: первый 1, второй 10. Это можно использовать,
> как "многозначную" логику.
Однозначно определена только константа FALSE, только с ней и надо сравнивать.
← →
Кто б сомневался © (2008-12-01 17:32) [24]
> С тех пор у меня фобия по использованию Bool.
Вообще интересно почитать мнения программистов. :)
Ведь и Bool и Boolean где то нужно одно, а где то другое.
Иногда без Bool не обойтись, к примеру в структурах API.
Иногда Bool удобнее использовать, т.к. 0 - это false, а >0 это true.
← →
blackman © (2008-12-01 17:55) [25]Надо использовать только Bool и не заморачиваться. Иначе с API будут проблемы.
← →
Anatoly Podgoretsky © (2008-12-01 20:08) [26]> Кто б сомневался (01.12.2008 17:32:24) [24]
Касательно нуля так, а вот не 0 обысно не Истина, а какое то значение - адрес, хендл, количество и т.л.
← →
Anatoly Podgoretsky © (2008-12-01 20:11) [27]> blackman (01.12.2008 17:55:25) [25]
И с Bool тоже будут, точнее уже есть. Кто то кое где посчитал, что 1 это True, а тот откуда ни возмись появилось, не то что вы подумали, а FFFFFFFF и программы лопнули. Не единственный щелчок по носу. Некоторые проблемы описаны в справке. Гарантируется только 0 = False
← →
blackman © (2008-12-01 20:55) [28]Anatoly Podgoretsky © (01.12.08 20:11) [27]
Что значит кое кто и кое где? Огласите список фамилий! Накажем! :)
Если по-большому, bool и Boolean это изврат. Используем integer и все понятно и просто. Единственное, что этому мешает - компилятор :)
← →
Anatoly Podgoretsky © (2008-12-01 21:30) [29]Ну погоревалм, а потом дружно стали переделывать библиотеки и программы на
x <> 0 then
Наказывать то некого, сами себя наказали.
А вот двойственная природа функций в С и в ОС меня огорчает. Представляешь как им там в Борланде с переводом. Когда функция описана, как возвращающая BOOL а там черте знает что.
Но одну фамилие назову, бить надо Страуструпа или кто там до него был, вроде он крайний.
← →
blackman © (2008-12-01 21:56) [30]бить надо Страуструпа или кто там до него был, вроде он крайний
Низя! Я по его книге учился, когда С осваивал.
И borland НЕ прав хотя бы потому, что DELPHI появился позже C. Надо было учесть существующее.
К стати, нигде не говорится, что истина именно единица. Не ноль это да.
Где вообще увидели единицу?
Это и логично, поскольку анализируется не бит.
А вообще, все эти условности легко отбрасываются в асме. Различаем длину операнда, а не какие-то придуманные слова...
← →
DVM © (2008-12-01 22:14) [31]
> И borland НЕ прав хотя бы потому, что DELPHI появился позже
> C. Надо было учесть существующее.
Это еще неизвестно, что раньше появилось Pascal или C. Оба где то в 1970 году, причем си даже на год попозже вроде.
← →
blackman © (2008-12-01 22:24) [32]DVM © (01.12.08 22:14) [31]
Я не о паскале, а о дельфи
← →
Anatoly Podgoretsky © (2008-12-01 22:35) [33]> blackman (01.12.2008 21:56:30) [30]
Я точно не помню, но вроде бы была определена константа TRUE = 1 и это работало, пока вдруг Микрософт не стал возвращать вместо 1 значение -1, что соответствует определению bool
Ну дальше ты домыслишь сам.
← →
blackman © (2008-12-02 12:18) [34]вроде бы была определена константа TRUE = 1
Где? Такого я не видел.
Идея с -1 понятна, но как-то не очень верится. Остается только гадать.
← →
KSergey © (2008-12-02 12:45) [35]> Anatoly Podgoretsky © (01.12.08 22:35) [33]
> Я точно не помню, но вроде бы была определена константа
> TRUE = 1 и это работало, пока вдруг Микрософт не стал возвращать
> вместо 1 значение -1, что соответствует определению bool
>
> Ну дальше ты домыслишь сам.
А не надо было борланду домысливать.
Понятно же, что в WinAPI - интерфейс Сишный, следовательно взгляд его писателей (вернее даже видение мира ввобще) - тоже сишный, под это и надо было подстравиваться, когда вводили BOOL и интерпретировали операции с ним.
А они "по правильному" сделали. Не подумали.
← →
Anatoly Podgoretsky © (2008-12-02 16:23) [36]> KSergey (02.12.2008 12:45:35) [35]
Одно но, я не про Борланда рассказывал!
← →
clickmaker © (2008-12-02 16:28) [37]-1 это WordBool, в OLE
Вообще, булевский тип кем только не был: и int, и word, и byte
← →
Германн © (2008-12-02 16:41) [38]
> Вообще, булевский тип кем только не был: и int, и word,
> и byte
>
А иногда и bit :)
← →
KSergey © (2008-12-02 16:46) [39]> Anatoly Podgoretsky © (02.12.08 16:23) [36]
> Одно но, я не про Борланда рассказывал!
Это я понял, я немного про другое: в дельфи могли бы сами правильное сделать сравнение для не Boolean-типа под if
← →
Anatoly Podgoretsky © (2008-12-02 16:56) [40]> clickmaker (02.12.2008 16:28:37) [37]
Кто работал правильно (var <> 0 {False}), не пользовался константами TRUE (var = TRUE), или в стандартной форме if var {} - не пострадал.
Страницы: 1 2 вся ветка
Текущий архив: 2009.01.25;
Скачать: CL | DM;
Память: 0.54 MB
Время: 0.006 c