鱼C论坛

 找回密码
 立即注册
查看: 4353|回复: 9

初学求教

[复制链接]
发表于 2013-6-9 11:12:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我按视频做了几道题,发现不理解的地方,求教。
#include <stdio.h>
void main()
{
int a=2,b=4,c=6,x,y;
y=(x=a+b),(b+c);
printf("y=%d\nx=%d\n",y,x);
}

按老师说的,y=(b+c)才对。但我执行后,x=6,y=6.怎么回事?


#include <stdio.h>
void main()
{
  int i=5,j=5,x,y;
  x=(++i)+(++i)+(++i);
  y=(j++)+(j++)+(j++);
  printf("x=%d\ny=%d\n%d\n%d\n",x,y,i,j);
         

}

x=22 ,这个值是怎么算出来的?我算来算去都是   x=21.

#include <stdio.h>
void main()
{
  int a=322;
  char b;
  b=a;
  printf("%c\n",b);
}

运行后得出结果为‘B’,按我的算法,应该是‘C’才对呀。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-9 12:18:23 | 显示全部楼层
第一题    逗号表达式要加个大括号才行y={(x=a+b),(b+c)};   第二题  编译器相关,   第三题  322-256=66='B',  正确。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-9 12:46:49 | 显示全部楼层
本帖最后由 zoom899 于 2013-6-9 12:50 编辑

第三题我知道答案是‘B’,但是怎么算出来的?第一题加括号后编译失败呀?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-9 13:07:02 | 显示全部楼层
zoom899 发表于 2013-6-9 12:46
第三题我知道答案是‘B’,但是怎么算出来的?第一题加括号后编译失败呀?

第一题:大括号换做小括号。
第三题:322二进制为1 0100 0010,char类型为8位,322赋值给char类型的b变量后,要截断为8位,于是b等于0100 0010也就是10进制的66即字符'B'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-9 13:48:07 | 显示全部楼层
更替的四季 发表于 2013-6-9 13:07
第一题:大括号换做小括号。
第三题:322二进制为1 0100 0010,char类型为8位,322赋值给char类型的b变量 ...

谢了,但第一题
#include <stdio.h>
void main()
{
int a=2,b=4,c=6,x,y;
(y=(x=a+b),(b+c));
printf("y=%d\nx=%d\n",y,x);
}
运行还是x=6,y=6.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-9 14:10:51 | 显示全部楼层
zoom899 发表于 2013-6-9 13:48
谢了,但第一题
#include
void main()

括号打错了地方,换成y = ((x = a + b), (b + c));就好了
这是因为等于"="优先级比逗号","要高,
所以你那句y=(x=a+b),(b+c);执行时等价于
( y = (x = a + b) )  ,  (b + c);
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-9 16:30:15 | 显示全部楼层
同上楼,要括起来的是逗号运算符的两部分,你括错位置了等于没括:(y=(x=a+b),(b+c));
应该是y=(x=a+b,(b+c))
搞不清运算符之间优先级的话,就多加几个括号:
y=((x=a+b),(b+c))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-10 11:44:50 | 显示全部楼层
第二题很当疼,这个跟编译器有关,标准中没有给出定义,不用管,实际编程中用不到这个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-13 20:08:52 | 显示全部楼层
学习学习。。。。。。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-16 19:19:19 | 显示全部楼层
zoom899 发表于 2013-6-9 13:48
谢了,但第一题
#include
void main()

亲,你误解了。应该是这样
  1. #include <stdio.h>
  2. void main()
  3. {
  4. int a=2,b=4,c=6,x,y;
  5. y=((x=a+b),(b+c));
  6. printf("y=%d\nx=%d\n",y,x);
  7. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-24 11:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表