Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.047 c
14-1118869482
Soft
2005-06-16 01:04
2005.07.18
Я сегодня окончательно убедился во влиянии звезд на судьбу.


9-1112730687
Yegorchic
2005-04-05 23:51
2005.07.18
Вывов текста в GLScene


14-1118838566
Поручик
2005-06-15 16:29
2005.07.18
Будет ли в России революция?


3-1118303009
Niarond
2005-06-09 11:43
2005.07.18
Запись Blob : pFIBQuery -> ADOQuery


14-1118399123
kaif
2005-06-10 14:25
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский