[an error occurred while processing this directive] [an error occurred while processing this directive]
Ну и где здесь ошибка?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Сталин 26 августа 2001 г. 02:52
В ответ на: Хи-хи, а полюбуйтеська на это:(+) отправлено AlexD 25 августа 2001 г. 23:50

q2>>=2 - даст результат 0x20. Всё правильно.

q2=q1+q2>>2 - даст результат 0x28, т.к. у плюса приоритет выше, чем у сдвига. При этом компилятор учитывает, что результат сложения двух байтов м. быть больше, чем 8 битов, и при сдвиге младшие биты из старшего байта будут перемещаться в старшие биты младшего байта. Чтобы явно указать не делать этого - нужно поставить cast, например q2=((unsigned char)(q1+q2))>>2.

q3>>=2 - результат 0xE0. Тоже правильно - ведь переменная знаковая и
при этом у неё отрицательное значение 0x80 == -128, следовательно, при сдвиге вправо, в старшие биты вдвигается "1", а не "0".

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru