Конференция "Прочее" » В чем разница между переменными типа bool и boolean?
 
  • demon © (29.11.08 18:27) [0]
    Sabj
  • @!!ex © (29.11.08 18:37) [1]
    языки разные. вообще с некоторыми оговорками эти типы можно считать одинаковыми.
  • tesseract © (29.11.08 18:40) [2]
    bool = longbool в delphi - являеться в сучности integer
  • Тын-Дын © (29.11.08 18:42) [3]

    > В чем разница между переменными типа bool и boolean?


    Сравни SizeOf()
  • Anatoly Podgoretsky © (29.11.08 18:49) [4]
    > demon  (29.11.2008 18:27:00)  [0]

    В справке описано, но кратко xBool не логический тип, а арифметический, используемый в недоязыках, как эквивалент логического. В Дельфи для поддержки АПИ введена ограниченая поддержка и его.
  • Anatoly Podgoretsky © (29.11.08 18:51) [5]
    > Тын-Дын  (29.11.2008 18:42:03)  [3]

    Зачем, это же производный (generic) тип и его длина меняется.
  • demon © (29.11.08 18:53) [6]
    > Сравни SizeOf()
    bool - 4
    boolean - 1
    теперь ясно, буду boolean использовать.
  • isasa © (29.11.08 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 © (29.11.08 18:54) [8]

    > теперь ясно, буду boolean использовать.

    Почему? И где?
  • @!!ex © (29.11.08 19:02) [9]
    ааа. речь о дельфевом bool. тогда да, 4 байта против 1.
  • Anatoly Podgoretsky © (29.11.08 19:05) [10]
    > demon  (29.11.2008 18:53:06)  [6]

    Плохое сравнение.
  • Anatoly Podgoretsky © (29.11.08 19:06) [11]
    > isasa  (29.11.2008 18:53:07)  [7]

    Ну так приходится расплачиваться за грехи предыдущих поколений
  • demon © (29.11.08 19:08) [12]
    из [7] вытекает что программа исползующая boolean не будет работать в 9x системах, верно?
  • @!!ex © (29.11.08 19:10) [13]
    > [12] demon ©   (29.11.08 19:08)

    Да нет, с чего бы?
  • Anatoly Podgoretsky © (29.11.08 19:11) [14]
    > DVM  (29.11.2008 18:54:08)  [8]

    И еще вопрос

    Зачем и как?
  • demon © (29.11.08 19:13) [15]

    > Да нет, с чего бы?

    > declared in WinNT.h
  • benito (29.11.08 19:16) [16]
    demon ©   (29.11.08 19:13) [15]

    http://www.ozon.ru/context/detail/id/2967330/
  • Anatoly Podgoretsky © (29.11.08 19:16) [17]
    А если будет написано

    > declared in abc.h

    то это будет означать, что под Виндоус работать не будет, только под abcOS
  • Григорьев Антон © (01.12.08 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 (01.12.08 09:09) [19]
    [18]> В C нет отдельного логического типа

    fixed
  • Anatoly Podgoretsky © (01.12.08 10:36) [20]
    > Григорьев Антон  (01.12.2008 8:57:18)  [18]

    Не только из чисел, практически все является логическим типом, например значения функций, сами функции, выражения, операции и так далее, одним словом все.
  • Anatoly Podgoretsky © (01.12.08 10:36) [21]
    > inoremap  (01.12.2008 9:09:19)  [19]

    Не fixed, а Masked
  • int64 (01.12.08 11:00) [22]
    У меня при приведении Bool к Boolean компилятор выдывал internal errror. Delphi7. Ругался на простую запись:
    if BoolValue then

    Когда я переписал на if BoolValue = True then, провалы прекратились.
    С тех пор у меня фобия по использованию Bool.

    Еще не понятно, как Д сравнивает эти типы между собой. Когда они не 0, они же всеравно могут не равнятся друг другу. Например: первый 1, второй  10. Это можно использовать, как "многозначную" логику.
    Но вдруг Д принудительно конвертит все "True" типа LongBool к 1, например, через неявные/невидимые приведения к Boolean.
    Проверить не было времени.
  • KSergey © (01.12.08 12:49) [23]
    > int64   (01.12.08 11:00) [22]
    > Еще не понятно, как Д сравнивает эти типы между собой. Когда
    > они не 0, они же всеравно могут не равнятся друг другу.
    > Например: первый 1, второй  10. Это можно использовать,
    > как "многозначную" логику.

    Однозначно определена только константа FALSE, только с ней и надо сравнивать.
  • Кто б сомневался © (01.12.08 17:32) [24]

    > С тех пор у меня фобия по использованию Bool.


    Вообще интересно почитать мнения программистов. :)
    Ведь и Bool и Boolean где то нужно одно, а где то другое.
    Иногда без Bool не обойтись, к примеру в структурах API.
    Иногда Bool удобнее использовать, т.к. 0 - это false, а >0 это true.
  • blackman © (01.12.08 17:55) [25]
    Надо использовать только Bool и не заморачиваться. Иначе с API будут проблемы.
  • Anatoly Podgoretsky © (01.12.08 20:08) [26]
    > Кто б сомневался  (01.12.2008 17:32:24)  [24]

    Касательно нуля так, а вот не 0 обысно не Истина, а какое то значение - адрес, хендл, количество и т.л.
  • Anatoly Podgoretsky © (01.12.08 20:11) [27]
    > blackman  (01.12.2008 17:55:25)  [25]

    И с Bool тоже будут, точнее уже есть. Кто то кое где посчитал, что 1 это True, а тот откуда ни возмись появилось, не то что вы подумали, а FFFFFFFF и программы лопнули. Не единственный щелчок по носу. Некоторые проблемы описаны в справке. Гарантируется только 0 = False
  • blackman © (01.12.08 20:55) [28]
    Anatoly Podgoretsky ©   (01.12.08 20:11) [27]
    Что значит кое кто и кое где? Огласите список фамилий! Накажем! :)

    Если по-большому, bool и Boolean это изврат. Используем integer и все понятно и просто. Единственное, что этому мешает - компилятор :)
  • Anatoly Podgoretsky © (01.12.08 21:30) [29]
    Ну погоревалм, а потом дружно стали переделывать библиотеки и программы на
    x <> 0 then


    Наказывать то некого, сами себя наказали.
    А вот двойственная природа функций в С и в ОС меня огорчает. Представляешь как им там в Борланде с переводом. Когда функция описана, как возвращающая BOOL а там черте знает что.
    Но одну фамилие назову, бить надо Страуструпа или кто там до него был, вроде он крайний.
  • blackman © (01.12.08 21:56) [30]
    бить надо Страуструпа или кто там до него был, вроде он крайний
    Низя! Я по его книге учился, когда С осваивал.
    И borland НЕ прав хотя бы потому, что DELPHI появился позже C. Надо было учесть существующее.
    К стати, нигде не говорится, что истина именно единица. Не ноль это да.
    Где вообще увидели единицу?
    Это и логично, поскольку анализируется не бит.
    А вообще, все эти условности легко отбрасываются в асме. Различаем длину операнда, а не какие-то придуманные слова...
  • DVM © (01.12.08 22:14) [31]

    > И borland НЕ прав хотя бы потому, что DELPHI появился позже
    > C. Надо было учесть существующее.

    Это еще неизвестно, что раньше появилось Pascal или C. Оба где то в 1970 году, причем си даже на год попозже вроде.
  • blackman © (01.12.08 22:24) [32]
    DVM ©   (01.12.08 22:14) [31]
    Я не о паскале, а о дельфи
  • Anatoly Podgoretsky © (01.12.08 22:35) [33]
    > blackman  (01.12.2008 21:56:30)  [30]

    Я точно не помню, но вроде бы была определена константа TRUE = 1 и это работало, пока вдруг Микрософт не стал возвращать вместо 1 значение -1, что соответствует определению bool

    Ну дальше ты домыслишь сам.
  • blackman © (02.12.08 12:18) [34]
    вроде бы была определена константа TRUE = 1
    Где? Такого я не видел.
    Идея с -1 понятна, но как-то не очень верится. Остается только гадать.
  • KSergey © (02.12.08 12:45) [35]
    > Anatoly Podgoretsky ©   (01.12.08 22:35) [33]
    > Я точно не помню, но вроде бы была определена константа
    > TRUE = 1 и это работало, пока вдруг Микрософт не стал возвращать
    > вместо 1 значение -1, что соответствует определению bool
    >
    > Ну дальше ты домыслишь сам.

    А не надо было борланду домысливать.
    Понятно же, что в WinAPI - интерфейс Сишный, следовательно взгляд его писателей (вернее даже видение мира ввобще) - тоже сишный, под это и надо было подстравиваться, когда вводили BOOL и интерпретировали операции с ним.
    А они "по правильному" сделали. Не подумали.
  • Anatoly Podgoretsky © (02.12.08 16:23) [36]
    > KSergey  (02.12.2008 12:45:35)  [35]

    Одно но, я не про Борланда рассказывал!
  • clickmaker © (02.12.08 16:28) [37]
    -1 это WordBool, в OLE

    Вообще, булевский тип кем только не был: и int, и word, и byte
  • Германн © (02.12.08 16:41) [38]

    > Вообще, булевский тип кем только не был: и int, и word,
    > и byte
    >

    А иногда и bit :)
  • KSergey © (02.12.08 16:46) [39]
    > Anatoly Podgoretsky ©   (02.12.08 16:23) [36]
    > Одно но, я не про Борланда рассказывал!

    Это я понял, я немного про другое: в дельфи могли бы сами правильное сделать сравнение для не Boolean-типа под if
  • Anatoly Podgoretsky © (02.12.08 16:56) [40]
    > clickmaker  (02.12.2008 16:28:37)  [37]

    Кто работал правильно (var <> 0 {False}), не пользовался константами TRUE (var = TRUE), или в стандартной форме if var {} - не пострадал.
  • Anatoly Podgoretsky © (02.12.08 17:00) [41]
    > KSergey  (02.12.2008 16:46:39)  [39]

    Повторяю я не про Борланд рассказывал, хотя у Борланда свои проблемы с этим типом, но и описан нормальный путь по преобразованию в Boolean, наприер B := var <> 0.
    Зато у Борланд проблема с двоичным, троичным назначением Bool - когда он и Bool и Integer одновременно. Борланд пошел тупо. Если значение равно 0 то это false, неудача, кой где удача. И тут проблема, надо было объявить результат не по описанию, а по использованию.
 
Конференция "Прочее" » В чем разница между переменными типа bool и boolean?
Есть новые Нет новых   [134447   +40][b:0][p:0.001]