![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
and, or
Хочу знать © (2006-08-16 15:18:00)Здраствуйте. Подскажите что делает выделенная строка.
Часто встречается такое, непойму для чего.
......
function GetData(Data: Integer): Integer;
begin
Data:= (Data and 7); //Вот, что это
result:=GetGlobalData(Data);
end;
end;
в процедуру GetData передается значение Data в диапазоне 0..7
?????????????????????????????????????????????????????????????????
Германн (2006-08-17 01:43:00) [1]
> Ну уж нет. Цитирую автора, пост [0]:
>
> > в процедуру GetData передается значение Data в диапазоне
> > 0..7
В таком случае ещё бОльшая бодяга! Ничего никто не потеряет! Но приведённый контекст, имхо, может означать, что в данную процедуру надопередать значения Data в диапазоне 0..7, чтобы не мешали другие, более старшие биты.
Джо (2006-08-17 01:07:00) [2]> [17] Германн © (17.08.06 00:44)
> В Data может быть "запаковано" весьма большое количество
> информации!
Ну уж нет. Цитирую автора, пост [0]:
> в процедуру GetData передается значение Data в диапазоне
> 0..7
Германн (2006-08-17 00:44:00) [3]Ну что вы развели тут такую бодягу?
В Dataможет быть "запаковано" весьма большое количество информации! А в процедуру GetData передается значение Data в диапазоне 0..7 т.е.только три младших бита. Если сия процедура должна только их и учитывать!
Ketmar (2006-08-16 22:25:00) [4]> [15] Ketmar © (16.08.06 22:23)
только надо отлавливать в кодеtry ... except end;и жестоко убивать вместе с аффтаром. %-)
Ketmar (2006-08-16 22:23:00) [5]> [14] Джо © (16.08.06 22:20)
скорее, архитектуры. %-) если допускается случай прихода "не того" -- то raise. если нет -- то это однозначно баг, и тогда ASSERT().
однако дискуссия пустая, имо... %-)
Джо (2006-08-16 22:20:00) [6]> [13] Ketmar © (16.08.06 22:14)
> > [12] Джо © (16.08.06 22:04)
> а одно другому не мешает. не всегда можно обойтись только
> compile-time проверками.
Не всегда, конечно. Это я так, общие замечания :) Но, если данные "приходят извне" я бы сделал-таки отдельную процедуру их валидации с rais'ом, а не Assert'ом. Но это дело вкуса, разумеется.
Ketmar (2006-08-16 22:14:00) [7]> [12] Джо © (16.08.06 22:04)
а одно другому не мешает. не всегда можно обойтись только compile-time проверками.
Джо (2006-08-16 22:04:00) [8]> [11] Ketmar © (16.08.06 22:01)
> > [9] TUser © (16.08.06 16:53)
> лучше ASSERT(). %-)
А еще лучше: TMyType = 0..7;
Ketmar (2006-08-16 22:01:00) [9]> [9] TUser © (16.08.06 16:53)
лучше ASSERT(). %-)
Anatoly Podgoretsky (2006-08-16 19:50:00) [10]Это точно, это не защита, а диверсия.
TUser (2006-08-16 16:53:00) [11]> Смыслом может быть защита функции от неожидаемых входных параметров.
При неожиданных входных параметрах такая "защита" приведет к неожиданному результату. Защита - это raise, имхо.
Хочу знать (2006-08-16 16:46:00) [12]
> McSimm © (16.08.06 15:21) [2]
Спасибо. Почитаем.
Спасибо всем за ответы.
McSimm (2006-08-16 15:33:00) [13]
> Zeqfreed © (16.08.06 15:29) [5]
Джо тоже прав. С точки зрения двоичной арифметики операция действительно бессмысленная. Я лишь высказал предположение скорее из области стиля программирования.
Джо (2006-08-16 15:31:00) [14]> Смыслом может быть защита функции от неожидаемых входных
> параметров.
Очень даже может быть.
Zeqfreed (2006-08-16 15:29:00) [15]McSimm прав, я думаю, выбираются только младшие три бита.
McSimm (2006-08-16 15:25:00) [16]
> Data and 7 с учетом того, что "значение Data в диапазоне
> 0..7" операция бессмысленная.
Смыслом может быть защита функции от неожидаемых входных параметров.
Джо (2006-08-16 15:22:00) [17]> Data:=(Data and 7);
Data and 7с учетом того, что "значение Data в диапазоне 0..7" операция бессмысленная. Ибо всегда равна значениюData.
McSimm (2006-08-16 15:21:00) [18]http://www.delphikingdom.ru/lyceum/seminar.asp?ID=1
Хочу знать (2006-08-16 15:19:00) [19]В теме написал еще и or, потому что, и с ним иногда встречается чтонибудь.