помогите разобраться с кодом

 
0
 
Delphi, Kylix and Pascal
ava
СЭНСЭЙ | 10.11.2009, 11:54
есть такой код на паскале

number_of_lpt:=mem[$0000:$0411]; //берется из памяти количество параллельных портов
number_of_lpt:=(number_of_lpt and (128+64)) shl 6; // непонятная операция

не мог бы кто нибудь подробно пояснить вторую строчку кода. Я знаю что shl это сдвиг но в остальном мне все это не понятно
особенно не пойму значение оператора and в этом контексте.
Ответы (4)
ava
Фантом | 10.11.2009, 12:29 #
and в данном случае - побитовое сложение. Т.е. оба операнда представляются в двоичном виде, а дальше для каждого бита работает правило x and y=1, если x=y=1, во всех остальных случаях x and y = 0.

В данном конкретном случае number_of_lpt and (128+64) просто выделяет 1-й и 2-й биты в number_of_lpt (искомое число хранится именно в них), сбрасывая остальные в 0, а затем эти два значащих бита передвигаются в конец, на 7-е и 8-е места, чтобы в байте получилось нужное число.
ava
СЭНСЭЙ | 10.11.2009, 14:46 #
Спасибо огромное!!!!
Я уже давно встречал такую форму записи логического сложения но не понимал ее.
Теперь все стало на свои места.
ava
~FoX~ | 10.11.2009, 18:40 #
Цитата (Фантом @ 10.11.2009, 13:29 findReferencedText)
and в данном случае - побитовое сложение

Тока не сложение а умножение....Сложение or
ava
Фантом | 10.11.2009, 22:04 #
Цитата (~FoX~ @ 10.11.2009, 18:40 findReferencedText)
Тока не сложение а умножение....Сложение or

Да, действительно опечатка.

P.S. Но в остальном все верно. smile
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить