c语言有关问题。哪位高手能解释一上程序运行结果吗?
c语言问题。。。。。。谁能解释一下程序运行结果吗???#includestdio.h#includeconio.hvoid main(){unsigned
c语言问题。。。。。。谁能解释一下程序运行结果吗???
#include<stdio.h>
#include<conio.h>
void main()
{
unsigned char i,b;
b=0;
for(i=5;i>=0;i--)
{
printf("%d %d\n",i,b);
b+=i;
getch();
}
printf("%d%d",i,b);
getch();
}
结果//
i b
5 0
4 5
3 9
2 12
1 14
0 15 请解释一下i在0之后 b变化的情况。。。。(本人是菜鸟,所以有些知识不具备,还望谅解)
255 15
254 14
253 12
252 9
251 5
250 0....
[解决办法]
推荐一本书《C Primer Plus》,下面这图就是这树上的。
一样的情况,自己看。
[解决办法]
楼主定义的i 不是 unsigned char 么,这个是无符号字符型,取值范围是 0 - 255 的。
然后就是二楼的得出 255
你如果定义的i 是 int 型的就会直到 i=-1 就停止循环。跳出来,并且最终输出 (-1,15)就完事儿了。
但是后面的 254,14 之类的是哪儿来的。
for 循环里面还要 getch() 么。。。。
[解决办法]或者 你把 unsigned char i,b;
改成 unsigned int i,b;
实际运行一下 应该能对其运行规则有个了解
正像2楼的兄台说的
unsigned char 是 当 i超标 溢出后 变成255
而unsigned int 起点是0 。。
[解决办法]测试过了,就是你理解的那样!
例如:
在16位机上,int 的范围是-32768~32767
那么此时,如果int i = 32768的话,它就会溢出到它的起始点,也就是-32768(-32768是int的起始点,不是0!),虽然这时i的赋值是32768,但是实际上他的值为-32768,那么同理,char 255 = (128+127),但实质上相当于(-128+127)所以,255的实际值为-1。
就是这样吧,根据c primer plus 上的讲解理解的。
例外说一句,c primer plus 真的是一本好书。