Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.10;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
2-1156168684
ян
2006-08-21 17:58
2006.09.10
вопрос по ApplicationEvents


2-1155895482
иван8511
2006-08-18 14:04
2006.09.10
Как сделать папку активной?


1-1154237394
tio
2006-07-30 09:29
2006.09.10
Вывод окна на передний план


2-1156174355
her
2006-08-21 19:32
2006.09.10
RichEdit.Lines.Add


15-1156099997
ghtl
2006-08-20 22:53
2006.09.10
audio convert