Форум: "Потрепаться";
Текущий архив: 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.48 MB
Время: 0.043 c