スパイラルしてきた…

#include <stdio.h>
#include <stdint.h>

int main(void)
{
unsigned int i;
i = 0x10000000; printf("%08x : %d\n", i, i);
i = i << 1; printf("%08x : %d\n", i, i);
i = i << 1; printf("%08x : %d\n", i, i);
i = i << 1; printf("%08x : %d\n", i, i);
i = i >> 1; printf("%08x : %d\n", i, i);
i = i >> 1; printf("%08x : %d\n", i, i);
i = i >> 1; printf("%08x : %d\n", i, i);
return 0;
}

実行結果
10000000 : 268435456
20000000 : 536870912
40000000 : 1073741824
80000000 : -2147483648
40000000 : 1073741824
20000000 : 536870912
10000000 : 268435456

unsigned int なのに負? ヤバい, 分からん….