思考以下程序的输出:
int main() { unsigned i; for(i=9;i>=0;i--) { printf("%u ",i); } system("pause"); return 0; }
咋一看,这题简单的不能再简单!很多读者会不假思索回答:9 8 7 6 5 4 3 2 1 0
但是如果在电脑上一运行就会大吃一惊,死循环!!为什么呢?
其实很简单!
i=9时打印9,没错!i=8时打印8,当i=0时打印0,当i=-1时,小心喽,并不会跳出循环!
这是因为i为unsigned类型的,i=-1时在32位计算机中的存储形式为:1111 1111 1111 1111 1111 1111 1111 1111
由于i为unsigned类型,符号位1当做数值最高位处理,即 i 实际上为2^32-1 ,该数大于0,故打印。i-1后仍非常大,故一直
输出到0,然后又从2^32-1开始打印,如此循环打印。