ちょと質問です。

unsigned char buf[4];
unsigned int n;
fread(buf, sizeof(char), sizeof(buf), FP);
n = (buf[3]<<24)^(buf[2]<<16)^(buf[1]<<8)^buf[0];
printf("n = %d\n", n);


n が符号付になってしまうんですがこういうものなんでしょうか?
符号なし整数になってほしいんですが、ドコがどういけないのかサッパリで・・