![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
двоичная запись [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]Никак. К чему этот изврат, если есть шестнадцатеричная запись?