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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2022, 21:05   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию Boolean как byte

Есть переменная типа булеан
Код:
var
b:boolean
Часто в программе в какой-то формуле было использовать 0, или 1 в зависимости от значения этой переменной. И использовал такой вот массив:
Код:
const
  s_f0t1 : array [false..true] of byte = (0, 1);
И в программе внутри формул делал так
Код:
s_f0t1[b]
Недавно интереса ради попробовал так и оно откомпилировалось
Код:
byte(b)
Вопрос: всегда ли будет корректно работать byte(b)?
Или могут быть проблемы и ошибки по какой-то причине?
Kronos913 вне форума Ответить с цитированием
Старый 03.02.2022, 21:14   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
всегда ли будет корректно работать byte(b)?
Да.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.02.2022, 21:19   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Да.
Нет. Пример:
Код:
  b:=boolean(5);
  writeln(byte(b));
Ответ: byte(b) = 5.
Arigato вне форума Ответить с цитированием
Старый 03.02.2022, 21:26   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Arigato, спасибо за интересный пример. Но с такой инициализацией boolean и подход ТСа с массивом не поможет. Если же инициализировать честными false или true, то результат будет 0 и 1 всегда.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.02.2022, 22:19   #5
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

Ну я имел в виду примеры в роде такого

a:=b + c*byte(checkbox1.checked);
Kronos913 вне форума Ответить с цитированием
Старый 03.02.2022, 23:36   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Если же инициализировать честными false или true
Учитывая тот набор извращений, который ТС показывал в прочих темах, ничего удивительного, если у него в булевской переменной окажется что-то отличное от 0 или 1
Arigato вне форума Ответить с цитированием
Старый 03.02.2022, 23:56   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
в булевской переменной окажется что-то отличное от 0 или 1
"Число Пи в военное время достигает четырех!"
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 04.02.2022, 22:20   #8
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

Дало сбой. При том что код был

a:=2+Byte(ChechBox.Checked)

а - байт, который использовался как адрес в массиве

И такой код начал выдавать значения Byte(ChechBox.Checked) за пределами 0-1
Kronos913 вне форума Ответить с цитированием
Старый 04.02.2022, 22:43   #9
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

У вас стоит задача написать как можно более извращенный код?
Код:
if ChechBox.Checked then a:=3 else a:=2;
Arigato вне форума Ответить с цитированием
Старый 04.02.2022, 22:55   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Дало сбой. При том что код был
Если у вас есть воспроизводимый пример, то можно посмотреть в дебаге, что там за ассемблерный код и содержимое регистров. Геттер GetChecked записывает в результирующий регистр 0 или 1 (используя команды cmp и setz).
Или перепишите код, как предлагает Arigato.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
byte и unsigned byte в JAVA - Программирование Android vlobunet Java Мобильная разработка (Android) 2 27.11.2021 18:45
Обьясните как работать с Boolean ? SuBwooFer JavaScript, Ajax 1 02.03.2010 00:51
Как передать результат функции как Array of Byte? Alex Cones Общие вопросы Delphi 4 05.12.2009 18:55
PAS: byte --> boolean Jean-Esther Помощь студентам 4 02.03.2009 21:29