Вот такой код:
Код
unsigned char x,y=0x34,z;
int main()
{
x=5;
y=y>>5;
z=5;
return 0;
}
А это "оптимизированный" выход, опции -O2 или -O1
Код
7: x=5;
+00000032: E095 LDI R25,0x05 Load immediate
+00000033: 93900062 STS 0x0062,R25 Store direct to data space
8: y=y>>5;
+00000035: 91800060 LDS R24,0x0060 Load direct from data space
+00000037: 2E09 MOV R0,R25 Copy register
+00000038: C001 RJMP PC+0x0002 Relative jump
+00000039: 9586 LSR R24 Logical shift right
+0000003A: 940A DEC R0 Decrement
+0000003B: F7EA BRPL PC-0x02 Branch if plus
+0000003C: 93800060 STS 0x0060,R24 Store direct to data space
9: z=5;
+0000003E: 93900063 STS 0x0063,R25 Store direct to data space
Смотрим на цикл и тихо радуемся
Если x!=z то код получается нормальный