关于unsigned的一些事儿

思考以下程序的输出:

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开始打印,如此循环打印。

原文地址:https://www.cnblogs.com/yanglf/p/2759482.html