s1e13第三题
没看懂小甲鱼的这个课后作业的代码#include <stdio.h>
int main()
{
signed char i = 0;
while (i <= 0)
{
printf("%d", i);
i = i - 1;
}
return 0;
}
为什么输出的是:
0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-31-32-33-34-35-36-37-38-39-40-41-42-43-44-45-46-47-48-49-50-51-52-53-54-55-56-57-58-59-60-61-62-63-64-65-66-67-68-69-70-71-72-73-74-75-76-77-78-79-80-81-82-83-84-85-86-87-88-89-90-91-92-93-94-95-96-97-98-99-100-101-102-103-104-105-106-107-108-109-110-111-112-113-114-115-116-117-118-119-120-121-122-123-124-125-126-127-128 应该是0-1=-2
-1-1=-2
-2-1=-3
... -n
吧?
你的while里面的限制条件是个死循环,因为i已经是0了,那么小于等于0就永远为真,就会永远执行
望采纳 这个代码的意思是打印小于等于0的所有数字,由于char声明的i只占一个字节,打印的范围在127到-128之间,所以输出了0到-128 1.首先 char类型 是8个BIT位,即可以表达256种可能,即可以表示数字 0-255共256个。或者带上符号 +127到(负128)共256位。
2.对char一直循环减1就会从0减到付128再减1会变正127.(想象为一个圆圈)
3.所以while(i<0),减到-128后再减一次1i==127>0。跳出循环。 signedchar i 定义的是一个8位的有符号数。数据范围是-128~127.
while 循环是从0 开始,向负无穷大打印。
但是由于i只有8位,当i=-128时,其二进制表示就是10000000b, i-1的值就会变成01111111,表示127.
所以当打印完-128后,i = i - 1 = 127 > 0; while就终止了啊。
页:
[1]