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

Вниз

В чем разница между переменными типа 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.006 c
4-1204615317
Николай1984
2008-03-04 10:21
2009.01.25
Зауск DOS приложения в фрейме своей программы


1-1207054894
Странник81
2008-04-01 17:01
2009.01.25
А возможно ли?


9-1112987903
POL
2005-04-08 23:18
2009.01.25
С модэлирую 3D модели типа бесплатно


11-1196770055
Сидор
2007-12-04 15:07
2009.01.25
Корректный перенос проекта в другую папку


2-1228767885
Platto
2008-12-08 23:24
2009.01.25
TDataSet





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