1. 程式人生 > >unsigned int與int相加的問題

unsigned int與int相加的問題

以前還真沒在上面較過真,結果今天就被鄙視了,特地記下來。先看程式:

int main()
{
	int a = -6;
	unsigned int b = 4;
	if(a+b > 0)
		printf("a+b>0\n");//這句話被列印
	else
		printf("a+b<0\n");
	int z = a+b;
	if(z > 0)
		printf("z>0");
	else
		printf("z<0");//這句話被列印
}

下面解釋一下原因:當int和unsigned in相加時,要將int轉化為unsigned int,而int小於0,所以它的最高位是符號位,為1,所以轉化的結果是一個很大的正數,在第一個if語句中,是兩個“正數”相加,結果自然就大於0了。而在z = a+b這一句時,它把a+b的結果看做一個int型別,而a+b最高位為1,所以z是一個負數,所以列印的是第二個語句。