一个c的令人迷惑的问题!!!!

GZ 2004-07-05 02:55:56
/////////////////////////////////////////////////////////
// 为了问问题写的模拟程序,不能编译通过
/////////////////////////////////////////////////////////

#include<stdio.h>
#define CONST 640

int main()
{
int x;

//其中p->z.y的值也为640,类型为unsigned int,
//即printf("%d\n",p->y.z)的结果是640
//但不知道为什么还能打印一次haha,只一次
for (x=0; x<p->z.y - (CONST+8); x+=CONST+8) {
printf("haha\n");
}

//要是把p->z.y改成640就不打印haha.
for (x=0; x<640 - (CONST+8); x+=CONST+8) {
printf("haha\n");
}
}
...全文
163 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
GZ 2004-07-05
  • 打赏
  • 举报
回复
多谢个位大虾了,原来-8被转成unisgned int型了,至于为什么只能循环一次,这个循环还有一个控制条件,我忘了写上来了
pacman2000 2004-07-05
  • 打赏
  • 举报
回复
看看转换规则,unsigned int 比 int 大。因此应该是转成了unsigned int做了比较。
你用%d输出,参数被转换成了int。
GZ 2004-07-05
  • 打赏
  • 举报
回复
那个z.y和y.z是一个意思,y.z我打错了
GZ 2004-07-05
  • 打赏
  • 举报
回复
y.z和z.y没什么关系,他只是个代表而已!
GZ 2004-07-05
  • 打赏
  • 举报
回复
printf("%d\n",p->z.y-(CONST+8))是 -8 ,真是见鬼了
Dong 2004-07-05
  • 打赏
  • 举报
回复
p->z.y的类型是unsigned int
但不能保证x<p->z.y - (CONST+8);这一表达式类型也是unsigned int,况且x的类型为int
所以p->z.y - (CONST+8)最后会是int 类型的。
我觉得一楼的问得好
oo 2004-07-05
  • 打赏
  • 举报
回复
应该不只输出一个 haha 才对
nobush 2004-07-05
  • 打赏
  • 举报
回复
其中p->z.y的值也为640,类型为unsigned int,即没有负数
p->z.y-(648)=65528(16位的)
nobush 2004-07-05
  • 打赏
  • 举报
回复
其中p->z.y的值也为640,类型为unsigned int
即没有负数!
640-648=(16位下是65528)
pacman2000 2004-07-05
  • 打赏
  • 举报
回复
y.z还是z.y???

70,019

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧