Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2009, 17:47   #1
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Вопрос Разновидности Boolean

Разъясните вот эту табличку (отсюда взял):
|ЛОГИЧЕСКИЕ ТИПЫ |
|Название |Длина, Байт |OS |Значение |
|BOOLEAN |1 |Linux, DOS |False, True |
|BYTEBOOL |1 |Совместим с С |False, True |
|WORDBOOL |2 |Win |False, True |
|LONGBOOL |4 |Win |False, True |
Я все время думал, что если Boolean, то 1 бит, а тут такое... Это правда?
k1r1ch вне форума Ответить с цитированием
Старый 10.11.2009, 17:58   #2
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
то 1 бит, а тут такое...
А как один бит в оперативку записать?..

Информация для размышления
http://www.hostmake.ru/articles/assembler/213/
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 10.11.2009, 18:02   #3
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Минимальная ячейка памяти, которую может адресовать процессор - 1 байт. Оперировать с битами пришлось бы вручную, поэтому используется char или int (в Си). Про остальные виды булей вижу впервые.
ds.Dante вне форума Ответить с цитированием
Старый 10.11.2009, 18:02   #4
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Понятненько) А вот зачем тогда 4 байта или 2? Можно же одним обойтись, есть же (как там написано):
Цитата:
AH и AL каждый по одному байту
k1r1ch вне форума Ответить с цитированием
Старый 10.11.2009, 18:04   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

тип boolean всегда занимал 1 байт памяти. Главное отличие типов
Boolean : False < True (!)
ByteBool (1 байт), WordBool (2 байта), LongBool (4 байта) : False <> True
различие в размерах не слишком критично, 2-х и 4-х байтовый буль нужен для того чтобы можно было без потерь преобразовать integer -> boolean -> integer

Последний раз редактировалось rpy3uH; 10.11.2009 в 18:09.
rpy3uH вне форума Ответить с цитированием
Старый 10.11.2009, 18:07   #6
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Во-первых, зачем это надо (ну и пусть себе меньше False);
Во-вторых, а куда байты-то все-таки утекают лишние? На то, чтобы хранить информацию, что false <> true ?
k1r1ch вне форума Ответить с цитированием
Старый 10.11.2009, 18:13   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от k1r1ch Посмотреть сообщение
Во-первых, зачем это надо (ну и пусть себе меньше False);
просто исторически так сложилось

Цитата:
Сообщение от k1r1ch Посмотреть сообщение
Во-вторых, а куда байты-то все-таки утекают лишние? На то, чтобы хранить информацию, что false <> true ?
куда пропадает информация? вот тебе примеры
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 x,y:integer;
 b:LongBool;
begin
 x:=13245678;
 b:=LongBool(x);
 y:=integer(b);
 ShowMessage(inttostr(y));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 x,y:integer;
 b:boolean;
begin
 x:=13245678;
 b:=Boolean(x);
 y:=integer(b);
 ShowMessage(inttostr(y));
end;
запусти и посмотри результаты

Последний раз редактировалось rpy3uH; 10.11.2009 в 18:15.
rpy3uH вне форума Ответить с цитированием
Старый 10.11.2009, 19:06   #8
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Хмм... А зачем вообще число хранится в булевом типе? Мне от него надо только true или false, а он зачем то еще число хранит? Для того что ли, чтобы место не пропадало?
k1r1ch вне форума Ответить с цитированием
Старый 10.11.2009, 19:14   #9
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от k1r1ch Посмотреть сообщение
Хмм... А зачем вообще число хранится в булевом типе? Мне от него надо только true или false, а он зачем то еще число хранит? Для того что ли, чтобы место не пропадало?
да просто так, от нечего делать. просто когда-то нужен был булевый тип размером в 4 байта. Когда булевый тип имеет размер 4 байта, проще приводить типы и проще всё унифицировать. Например, большинство API функций возвращают longbool.
rpy3uH вне форума Ответить с цитированием
Старый 10.11.2009, 19:16   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,855
По умолчанию

4 байта для булена нужны для оптимизации работы программы, т.к. процессору (современному) проще 4 байта из памяти вытащить, чем 1.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PAS: byte --> boolean Jean-Esther Помощь студентам 4 02.03.2009 21:29
Действия с переменными boolean в VBA Юнлинг Microsoft Office Excel 3 25.12.2008 07:57
И опять boolean. dimple Помощь студентам 4 04.05.2008 14:03
Boolean Air Общие вопросы Delphi 2 16.02.2008 17:15
Boolean... ZhekON Общие вопросы Delphi 2 17.06.2007 00:39