首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c语言有关问题。哪位高手能解释一上程序运行结果吗?

2013-01-06 
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》,下面这图就是这树上的。
一样的情况,自己看。
c语言有关问题。哪位高手能解释一上程序运行结果吗?
[解决办法]
楼主定义的i 不是 unsigned char 么,这个是无符号字符型,取值范围是 0 - 255 的。
然后就是二楼的得出 255

你如果定义的i 是 int 型的就会直到 i=-1  就停止循环。跳出来,并且最终输出  (-1,15)就完事儿了。

但是后面的  254,14 之类的是哪儿来的。  
for 循环里面还要 getch() 么。。。。


引用:
看看計算機原理之類的書
數據在計算機中的表示方法。

你會了解一大堆這個碼,那個碼,
最牛的是補碼,然後你就會明白了。

unsigned char 0 二進制表示為 00000000
減去1,
00000000
-      1
---------
11111111

[解决办法]
或者 你把 unsigned char i,b;
改成 unsigned int i,b;
实际运行一下  应该能对其运行规则有个了解
正像2楼的兄台说的
unsigned char 是 当 i超标 溢出后 变成255
而unsigned int 起点是0 。。

[解决办法]
引用:
我着重研究b的变化情况,在i=0之后,也就是反向溢出之后,i的值不是变为255了吗,那之后b的变化怎么解释???我自己理解为此时的i实际上就是-1,但不知对不对。望大神赐教、、、

测试过了,就是你理解的那样!
例如:
在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 真的是一本好书。

热点排行