Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

двоичная запись [D7]


гость ©   (2008-01-08 02:41:00) 

как сообщить компилятору что запись является двоичным представлением числа
a:byte;
a:=10011110


Германн   (2008-01-08 14:58:00) [1]


> palva ©   (08.01.08 12:49) [12]
>
> Кстати, мастера, никто не знает, как можно инвертировать
> элемент множества?
>

Конкретно в твоем примере элементарно. С помощью absolute и Ord.


Anatoly Podgoretsky   (2008-01-08 12:57:00) [2]

> palva  (08.01.2008 12:49:12)  [12]

Operator Operation Operand types Result type Example
+ union set set Set1 + Set2
- difference set set S - T
* intersection set set S * T
<= subset set Boolean Q <= MySet
>= superset set Boolean S1 >= S2
= equality set Boolean S2 = MySet
<> inequality set Boolean MySet <> S1
in membership ordinal, set Boolean A in Set1


palva   (2008-01-08 12:51:00) [3]

Пардон
// fs := fs XOR[Flag5];


palva   (2008-01-08 12:49:00) [4]

Кстати, мастера, никто не знает, как можно инвертировать элемент множества?
Давно интересовал этот вопрос.

{$APPTYPE CONSOLE}
uses SysUtils;
type
 TMyFlag = (Flag1, Flag2, Flag3, Flag4, Flag5, Flag6, Flag7, Flag8);
 TMyFlagSet = set of TMyFlag;
var
 fs: TMyFlagSet;
begin
 fs := [Flag5, Flag1, Flag8, Flag1];
 fs := fs + [Flag3] - [Flag8]; // Поднятие/опускание флага
 // только вот инвертирование флага непонятно как делать
 // Вот такой длинный код
 if Flag5 in fs then
   fs := fs - [Flag5]
 else
   fs := fs + [Flag5];
 // хотелось бы заменить на нечто такое:
 // fs := fs OR [Flag5];
 // но, конечно, компилятор не дает
 WriteLn(IntToHex(PInteger(@fs)^, 2)); // 05
end.


palva   (2008-01-08 12:09:00) [5]


> гость   (08.01.08 03:44) [7]
> придется прописать константы с осмысленными именами присвоить
> им десятичные значения и ими пользоватся

Ужас! Вы раньше наверно только на си писали? Почитайте Вирта, самую первую книжку про паскаль. На паскале это делают так:
{$APPTYPE CONSOLE}
uses SysUtils;
type
 TMyFlag = (Flag1, Flag2, Flag3, Flag4, Flag5, Flag6, Flag7, Flag8);
 TMyFlagSet = set of TMyFlag;
var
 fs: TMyFlagSet;
begin
 fs := [Flag5, Flag1, Flag8, Flag1]; // Флаги даже могут повторяться
 WriteLn(IntToHex(PInteger(@fs)^, 2)); // 91
end.


Anatoly Podgoretsky   (2008-01-08 10:50:00) [6]

> гость  (08.01.2008 02:41:00)  [0]


const
  b_10011110 = $9E;
...
a := b_10011110;


Loginov Dmitry   (2008-01-08 10:19:00) [7]

> как сообщить компилятору что запись является двоичным представлением
> числа
> a:byte;
> a:=10011110


Так пойдет?

 a: byte;

 a := $9E; //10011110


Германн   (2008-01-08 03:55:00) [8]


> гость   (08.01.08 03:44) [7]
>
> придется прописать константы с осмысленными именами присвоить
> им десятичные значения и ими пользоватся

Ну наконец-то разумное высказывание.
Хотя ...
А шестнадцатиричные ничем не хуже.

А запись всё же лучше, если значения констант не превышают 255.


гость   (2008-01-08 03:44:00) [9]

придется прописать константы с осмысленными именами присвоить им десятичные значения и ими пользоватся

спасибо всем. тема закрыта.


гость   (2008-01-08 03:28:00) [10]

слово ( запись) в дальнейшем читать как  (строка кода)


{RASkov}   (2008-01-08 03:26:00) [11]

> [3] гость   (08.01.08 02:57)

Никак. Уже сказали об этом.... Либо десятичным представлением, либо шеснадцатиричным, либо строковым.... в строковом, как понимаешь, можно представить все, и твой двоичный вариант, но, как должен понимать, у строк и свой минус есть :)

> запись 1100110 or 00000001 гораздо наглядние
> нежели $66 or $1

Кому любоваться-то ?


Германн   (2008-01-08 03:13:00) [12]


> гость   (08.01.08 02:57) [3]
>
> переменная a это набор флагов
> 1 бит отвечает за одно
> 2 бит за другое
> ...
> запись 1100110 or 00000001 гораздо наглядние
> нежели $66 or $1
>

А при чём тут запись?


гость   (2008-01-08 02:57:00) [13]

переменная a это набор флагов
1 бит отвечает за одно
2 бит за другое
...
запись 1100110 or 00000001 гораздо наглядние
нежели $66 or $1


Германн   (2008-01-08 02:55:00) [14]

Гости мне уже надоели.
Примите и проч.


DrPass   (2008-01-08 02:48:00) [15]

Никак. К чему этот изврат, если есть шестнадцатеричная запись?


Наверх

Титульная страница Поиск, карта сайта Написать письмо