Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

Задачка для мозгов   Найти похожие ветки 

 
Ega23 ©   (2005-06-28 14:37) [0]

Тут с коллегой заспорили, можно ли сделать следующее:

Есть функция (или процедура с var параметром), которая устанавливает в числе определённый бит в 0 или 1.
Прототип такой:

function SetBit(const aValue:Cardinal; const BitNumber:Byte;
               const BitValue:Boolean):Cardinal;
begin
Result:=...;
end;

Фишка вся в том, чтобы сделать установку бита одной строчкой. Т.е. можно использовать любые унарные операции, сдвиги и т.п.


 
КаПиБаРа ©   (2005-06-28 14:40) [1]

можно


 
Ega23 ©   (2005-06-28 14:41) [2]

А как?  :о)


 
КаПиБаРа ©   (2005-06-28 14:44) [3]

Массив из 32/64 чисел + and/or


 
Игорь Шевченко ©   (2005-06-28 14:44) [4]


> Фишка вся в том, чтобы сделать установку бита одной строчкой


Result := ((aValue and (not (1 shl BitNumber))) or (ord(BitValue) shl BitNumber)) ?


 
Игорь Шевченко ©   (2005-06-28 14:47) [5]

Вместо Ord(BitValue) следует читать (Ord(BitValue) and 1)


 
BiN ©   (2005-06-28 15:06) [6]

Игорь Шевченко ©   (28.06.05 14:47) [5]

Вместо Ord(BitValue) следует читать (Ord(BitValue) and 1)


А разве одно другому для Boolean не равно?


 
Kerk ©   (2005-06-28 15:10) [7]

BiN ©   (28.06.05 15:06) [6]
А разве одно другому для Boolean не равно?


В общем случае - нет.


 
Игорь Шевченко ©   (2005-06-28 15:16) [8]

BiN ©   (28.06.05 15:06) [6]

Я предпочитаю дуть на воду после того, как обжегся на Nls-функциях WinAPI, куда true передавалось, как $FFFFFFFF :)

С уважением,


 
Digitman ©   (2005-06-28 15:21) [9]


> Есть функция (или процедура с var параметром),


> function SetBit(const aValue:Cardinal;...


"Как понимать тебя, Саид ?"(с)


 
Kerk ©   (2005-06-28 15:23) [10]

Digitman ©   (28.06.05 15:21) [9]

Слово "или" видишь? :)


 
Digitman ©   (2005-06-28 15:27) [11]


> Kerk ©   (28.06.05 15:23) [10]


прототип для функции видишь ?
функция - с параметрами)


 
Kerk ©   (2005-06-28 15:43) [12]

Digitman ©   (28.06.05 15:27) [11]
функция - с параметрами)


Функция. Но не процедура с var-параметром.
Или-или. :)


 
Digitman ©   (2005-06-28 15:49) [13]


> Kerk ©   (28.06.05 15:43) [12]


Дурью ведь маешься, Роман)

Ежу понятно, что в закрывающая скобка не на месте (д.б. стоять после слова "процедура")


 
BiN ©   (2005-06-28 15:53) [14]

Игорь Шевченко ©   (28.06.05 15:16) [8]

BiN ©   (28.06.05 15:06) [6]

Я предпочитаю дуть на воду после того, как обжегся на Nls-функциях WinAPI, куда true передавалось, как $FFFFFFFF :)


С этим-то всё понятно, но ведь речь здесь идет о Ord(Boolean), а не о Boolean, т.е. о порядковом номере значения в ряде: [False, True]


 
Игорь Шевченко ©   (2005-06-28 15:59) [15]

BiN ©   (28.06.05 15:53) [14]

А...понял. Значит, перестраховался :)


 
Nous Mellon ©   (2005-06-28 16:05) [16]


> Ежу понятно, что в закрывающая скобка не на месте (д.б.
> стоять после слова "процедура")

Отлично! ;)


 
Ega23 ©   (2005-06-28 18:00) [17]

2 Digitman ©   (28.06.05 15:49) [13]
Ежу понятно, что в закрывающая скобка не на месте (д.б. стоять после слова "процедура")

Раз 10 перечитал и так итак. Вроде, без разницы...  ?


 
jack128 ©   (2005-06-28 21:34) [18]

Kerk ©   (28.06.05 15:10) [7]
В общем случае - нет.

не знаю как для остальных версий, а для d7 - это одно и тоже. По крайней мере Борланд так говорит.

BiN ©   (28.06.05 15:53) [14]
т.е. о порядковом номере значения в ряде: [False, True]

ну например

type
 TEnum = (en1 = 1, en10 = 10);

procedure TForm1.Button1Click(Sender: TObject);
begin
 caption := inttostr(ord(en10))
end;

?


 
BiN ©   (2005-06-28 22:07) [19]

jack128 ©   (28.06.05 21:34) [18]

BiN ©   (28.06.05 15:53) [14]
...
type
TEnum = (en1 = 1, en10 = 10);
...
?


Про енумераторы же (можно я их так буду называть? -)) с явно заданным порядком элементов очень доходчиво вещает все та же справка Delph (7), согласно которой твой TEnum - состоит из 10, а не из 2-х элементов с именами

X: array [TEnum] of char;
caption:=SizeOf(X)


т.е. порядковый номер en10 равен именно 10.

Все это никак не влияет на наш случай. К тому же я бы не стал на месте автора использовать тип Буля, Byte как-то спокойнее.



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.029 c
1-1120025152
rooker
2005-06-29 10:05
2005.07.18
главное окно программы


1-1119961554
Mishenka
2005-06-28 16:25
2005.07.18
Как в ListView CheckBoxes отловить событие установки галки?


1-1119964584
Jolik
2005-06-28 17:16
2005.07.18
Проблема с реестром...


4-1116874602
Salvator
2005-05-23 22:56
2005.07.18
Передача звука по сети


14-1118907006
Calm
2005-06-16 11:30
2005.07.18
Авторские права. Могу ли я продать купленную мною книгу?