Ich habe gerade einfach mal unter Linux diesen Code compiliert und ausgeführt:
Code:
#include <stdio.h>

int main(void)
{
	unsigned long i=0;
	unsigned long t;
	for(i=0;i<20;i++)
	{
		t= 1<<i;
		printf("%u \n", t);
	}
	return 0;
}
und ich erhielt die Ausgabe
Code:
1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
also kann es an deinem Programmcode eigentlich nicht liegen. Allerdings wundert mich dein Ergebnis auch, denn du hast als letztes Ergebnis genau den maximalen Wert den die Variable annehmen kann minus den erwarteten Wert.
Ich kann aber auch nicht sagen woran das liegen könnte. Vielleicht ein Fehler im AVR-Studio?
Aber eine andere Möglichkeit weiß ich auch nicht.