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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2024, 17:35   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию Задать константу в двоичной системе

Можно ли как-то задать константу в двоичной системе?

В десятичную, или даже шестнадцатеричную не всегда удобно переводить число

Особенно если byte используется как компактно сжатый массив булевых переменных
Kronos913 вне форума Ответить с цитированием
Старый 17.03.2024, 17:43   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Только в Delphi 11 2021 года появились двоичные литералы с префиксом %.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 17.03.2024, 20:39   #3
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Особенно если byte используется как компактно сжатый массив булевых переменных
Внимание, правильный компактно сжатый массив булевых переменных:
Код:
type
  BoolArray = set of (Bool1, Bool2, Bool3); // и так далее; именуем значения по смыслу, естественно
Если значений в перечислении не больше 32, переменная данного типа занимает ровно один Integer (или меньше) и передается по значению через регистр. Встроенные процедуры (макросы компилятора) компилируются в одну ассемблерную инструкцию:
Код:
var
  B: BoolArray = [];
begin
  Include(B, Bool1);  // OR BL, $01
  Exclude(B, Bool1);  // AND BL, $FE
end;
Появились еще в Turbo Pascal 7.0, работают во всех версиях Delphi.
Vapaamies вне форума Ответить с цитированием
Старый 19.03.2024, 03:59   #4
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

А если нужно именно чтобы байт?

Просто у меня файл читается по одному байту, а в каждый байт запакованы 8 булеанов

Но есть несколько "устойчивых значений", при которых этот байт имеет другую обработку. И вот эти устойчивые значения было бы удобнее ввести в двоичной

Код:
case a of
       0: begin
             {код исключения 1}
           end;
   224: begin
             {код исключения 2}
           end; 
    else begin
             {основной код}
           end;
end;
И вот то 224 было бы удобнее ввести в двоичной 11100000
Kronos913 вне форума Ответить с цитированием
Старый 19.03.2024, 08:28   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
А если нужно именно чтобы байт?
Регистр BL — не байт? В примере я описал тип из 3 бит, компилятор отвел ему байт, потому что по умолчанию {$MINENUMSIZE 1}, больше обычно для совместимости с кодом на Си ставят.

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Но есть несколько "устойчивых значений", при которых этот байт имеет другую обработку.
Код:
type
  BoolArrayVariant = record
    case Byte of
      0: (AsBits: BoolArray);
      1: (AsByte: Byte);
  end;

const
  BitNull = 0;
  BitMagic = 224;

begin
  case A.AsByte of
    BitNull:
      ...
    BitMagic:
      ....
  else
    if Bool1 in A.AsBits then
      ...
  end;
end;
Лучше всегда использовать не числа, а именованные константы, для «магических» значений-то — уж точно!
Vapaamies вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
умножение в двоичной системе phasha Помощь студентам 2 26.02.2012 15:44
в двоичной системе незнайка_на_земле Помощь студентам 22 23.02.2011 08:15
Сложение в двоичной системе счисления Volchara Общие вопросы C/C++ 2 23.04.2009 19:54
работа в двоичной системе Toten Помощь студентам 3 06.03.2009 16:35
задать массив как константу...нужен совет dead-vip Паскаль, Turbo Pascal, PascalABC.NET 5 21.12.2008 16:07