方法一:
整數值越界后符號改變
int i = 0, max, min; while(1) { if(i + 1 <= 0) { max = i; min = i + 1; break; } i++; } printf("int最大值%d,最小值%d\n", max, min);
方法二:
0(unsigned int)的二進制為:00000000 00000000 00000000 00000000
按位取反(~):11111111 11111111 11111111 11111111
除以2(int類型中有一半表示負數,且比正數多一個)
printf("%d\n",~(unsigned int)0/2);
方法三:
先補碼得到-1(即各位全為1),然后利用移位運算得到最小,進而得到最大。
int i=0; i=~i; i=i<<(sizeof(int)*8-1); printf("min%d\n",i); i--; printf("max%d\n",i);