[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
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