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