int a=10;
do{a--;}while(a--);
为什么是无限循环?小括里到0不停么
a--是先用再减,所以一次循环while里面先判断a的值是否是0,再减一。
虽然a--到0时那一次不进入循环,但紧接着a就到-1了,即为真,又开始循环
int a=10;
do{a--;}while(a--);
为什么是无限循环?小括里到0不停么
首先注意 a的类型是int,前面无unsigned ,大多编译器默认认为是一个有符号数,有符号数最高位为符号位,0值减1会为-1。
再次 while(a--);语句,先判断while( a ),再执行a--。
第1次 while判断时 a=9
第2次 while判断时 a=7
第3次 while判断时 a=5
第4次 while判断时 a=3
第5次 while判断时 a=1
第6次 while判断时 a=-1
...........
从以上归纳可知每次判断时a均为奇数,不可能为0,所以会无限循环下去。
依次a的值为9,7,5,3,1,-1不会为0