Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

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

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

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

Код:
b:boolean
i:byte
Есть рядом два цикла.
Код:
For i:=0 to 1
Код:
For b:=false to true
И есть мысль о том, чтобы их объединить их в один и вместо b писать boolean(i)
Вопрос: как происходит это преобразование byte boolean?
Там вообще происходит преобразование? Или же просто процессор получает команды считать эту область памяти как boolean, и вообще нет никакой разницы, по тому адресу находится boolen или byte
Kronos913 вне форума Ответить с цитированием
Старый 22.09.2022, 21:45   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,000
По умолчанию

Вроде как преобразование типа ничего в памяти не меняет, просто воспринимает ячейку как данные другого типа. Но дизассемблер в помощь.

P.S. Надеюсь, твои программы никто кроме тебя не увидит, и не будет искать там ошибки или что-то дорабатывать...
Arigato на форуме Ответить с цитированием
Старый 22.09.2022, 21:53   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 450
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
P.S. Надеюсь, твои программы никто кроме тебя не увидит, и не будет искать там ошибки или что-то дорабатывать...
Это мои личные рабочие программы=)
Которые никто кроме меня и не должен видеть
Kronos913 вне форума Ответить с цитированием
Старый 22.09.2022, 22:56   #4
macomics
Форумчанин
 
Регистрация: 17.04.2022
Сообщений: 843
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Или же просто процессор получает команды считать эту область памяти как boolean, и вообще нет никакой разницы, по тому адресу находится boolen или byte
Преобразование типа это директива компилятору, как обращаться с данными в переменной. Это просто не может что-то изменить в памяти. А тем более процессор получит указания только в build-, но не в run-time.
macomics на форуме Ответить с цитированием
Старый 22.09.2022, 23:47   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,000
По умолчанию

Там скорее вопрос в asm-коде, будет по сути одно и тоже, или же что-то поменяется. Так-то да, Делфи фактически никакого преобразования типа не делает, а просто воспринимает ячейку как данные другого типа. Но это касается именно Делфи, другие языки могут себя и иначе вести.
Arigato на форуме Ответить с цитированием
Старый Вчера, 07:23   #6
macomics
Форумчанин
 
Регистрация: 17.04.2022
Сообщений: 843
По умолчанию

Только я бы советовал приводить тип boolean не к byte, а к integer. Особенное, если в цикле они передаются как параметры или присваиваются к каким-либо свойствам компонентов. По нотации вызовов все параметры приводятся к машинному слову и в 32-битном коде это слово длиной 4 байта, а в 64-битном уже 8 байт.

Таким образом после преобразования вы избавите компилятор от необходимости расширения типа каждый раз при использовании этого значения. Хотя в большинстве случаев это расширение может быть выполнено заменой команды mov на одну из команд movzx/movsx. Потерь по времени при этом не предвидится. Но вы можете избежать затраты 1-2 лишних тактов на повторяющиеся расширения. С учетом скоростей работы современных процессоров - это смехотворно и не требует к себе внимания.
macomics на форуме Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Boolean как byte Kronos913 Общие вопросы Delphi 9 04.02.2022 22:55
boolean mental БД в Delphi 4 10.08.2011 00:41
Boolean korzunmaria Паскаль, Turbo Pascal, PascalABC.NET 2 19.05.2010 22:13
PAS: byte --> boolean Jean-Esther Помощь студентам 4 02.03.2009 21:29
Boolean... ZhekON Общие вопросы Delphi 2 17.06.2007 00:39