![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Двоичные константы
snake_r © (2005-10-07 11:11:00)Здравствуйте! подскажите как пишутся двоичные константы :)
забыл как :( как шеснадцетиричные помню, а как двичные забыл б...я :)
Const flags:Integer=......; ?????
Anatoly Podgoretsky (2005-10-08 13:21:00) [1]SergP. (08.10.05 02:52) [9]
Это делается не так
const
b00010000 = 16;
begin...end (2005-10-08 09:22:00) [2]> Германн © (08.10.05 01:59) [7]
Это возможно только в ассемблерных вставках. [5] не имеет отношения к исходному вопросу -- автор справшивал про обычную форму объявления констант.
SergP. (2005-10-08 02:52:00) [3]
> snake_r (07.10.05 11:16) [2]
> ну вот блин :(
> хотелось для наглядности написать именно в двоичном виде
Для наглядности можно коментарий написать...
Const
flags:Integer=16; // 10000
Германн (2005-10-08 02:05:00) [4]Хотя прошу прощения. В сабже нет явноговопроса - "как описАть константу, используя двоичный код". :(
Германн (2005-10-08 01:59:00) [5]2 Anatoly Podgoretsky © (07.10.05 20:20) [5]
>Пишутся так 101010B в предложениях DB,DW etc
Если не трудно, пожалуйста дайте пример описания константы с помощью ассемблерных директив DB и DW. Ей богу, интересно. Код на ассемблере вставлял, более того, помню и inline, но то код, а вот описание? :(
palva (2005-10-07 22:52:00) [6]Free Pascal позволяет использовать префикс %
var
i: integer;
begin
i := %1010;
writeln(i); // 10
end.
Anatoly Podgoretsky (2005-10-07 20:20:00) [7]Пишутся так 101010B в предложениях DB,DW etc
han_malign (2005-10-07 14:35:00) [8]
> хотелось для наглядности написать именно в двоичном виде
общепринятая практика(C(и)-образно):
const
FLAG_0 = $00000001;
..............................
FLAG_31 = $80000000;
FLAG_FIRSTnLAST = FLAG_0 or FLAG_31;
.........................
//initialize
flags = FLAG_x or ...;
.........................
//set
flags = flags or FLAG_x;
.........................
//clear
flags = flags and not FLAG_x;
.........................
//both
if(flags and FLAG_FIRSTnLAST = FLAG_FIRSTnLAST)then ...
.........................
//any
if(flags and FLAG_FIRSTnLAST <> 0)then ...
.........................
//only
if(flags and FLAG_FIRSTnLAST = FLAG_0)then ...
а в Delphi:et cetera, et cetera, et cetera...
type
TFlag = (flXXX1,..., flXXX32);
TFlags = set of TFlag;
const FirstAndLast = [flXXX1, flXXX32];
.............
flags = [fl1,...];
Include(flags, fl1);
Exclude(flags, fl1);
if(fl.. in flags)...
if(flags * [fl1,...,fl32] = FirstAndLast)...
if(flags * (FirstAndLast + [fl4]) <> [] )...
А для наглядности существуют комментарии..
Woolen (2005-10-07 11:33:00) [9]
> хотелось для наглядности написать именно в двоичном виде
Для наглядности можно делать таким извращенным способом:
const
A: Byte = 1 or 2 or 4;//Три крайних бита выставлены
snake_r (2005-10-07 11:16:00) [10]ну вот блин :(
хотелось для наглядности написать именно в двоичном виде
begin...end (2005-10-07 11:12:00) [11]В Delphi -- никак.