题目:
5.1
#include <stdio.h>
unsigned char i = 0;
int main()
{
for(i = 0;i<=255;i++)
{
printf("hello world\n");
}
return 0;
}
5.2
#include <stdio.h>
int main()
{
unsigned int i;
for(i = 9; i >= 0; i--)
{
printf("%u\n",i);
}
return 0;
}
思路分析:
5.1
- 结果是代码死循环,因为这里的char类型是 unsigned类型的,所以表示在进制数位中的符号位消失,取代的是一个可以参与运算的比特数位
- 而且因为没有符号位,所以进制位可以肆无忌惮的+1,且在每次+1后进行了截断,而截断后的结果都不会超过 unsigned char的范围,也就是'255'
- 因此i永远不会超过'255'导致进入死循环。
注意:unsigned char的范围是 '0'~'255' 因为无符号类型的是拥有大于等于0
5.2
- int i是无符号类型的,因为无符号类型永远是大于等于0的,所以for循环内的条件恒成立。
- 哪怕进行了i--也不会因此变成小于0的数值。