Главная страница
    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.48 MB
Время: 0.04 c
14-1119547570
Olivka
2005-06-23 21:26
2005.07.18
Сколько стоит программа


3-1117703191
jiny
2005-06-02 13:06
2005.07.18
проблема с вложенными запросами


14-1119531870
BigMac
2005-06-23 17:04
2005.07.18
ВУЗы


3-1118187806
Dorian
2005-06-08 03:43
2005.07.18
Как программно перебирать значения в DBGrid?


1-1120334666
Alex-r
2005-07-03 00:04
2005.07.18
Печать на матричный принтер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский