社区
C语言
帖子详情
有关运算符的问题
kernelhao
2003-11-11 07:55:56
int w,z,x,y;
x=5;y=4;
w=x++*w++*w++
z=--y*--y*--y
请问一下最后W,Z,X,Y的值为多少呢?
计算机到底是怎么运算上面的式子的呢?
...全文
40
14
打赏
收藏
有关运算符的问题
int w,z,x,y; x=5;y=4; w=x++*w++*w++ z=--y*--y*--y 请问一下最后W,Z,X,Y的值为多少呢? 计算机到底是怎么运算上面的式子的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kuangjingbo
2003-11-12
打赏
举报
回复
干吗这样写?
lotuszm
2003-11-12
打赏
举报
回复
有高手回答没有,我也看了这个问题真的很是奇怪,当z=--y*--y时仍然是4,说明此时应该是2×2 的结果,但为什么是三个时仍然是三,真的有些搞不明白,有没有高手回答啊
LinuxPanther
2003-11-12
打赏
举报
回复
w=125 x=8
z=4 y=1 VC6.0中
对于w=x++*x++*x++ 我是理解的。因为x是先用在加。所以为5*5*5 然后,在加加。
不过z=4,实在是不解 ,请高手指明。
kernelhao
2003-11-12
打赏
举报
回复
不好意思,写错了一个!w=x++*w++*w++应该为:w=x++*x++*x++
_goolooloo_
2003-11-12
打赏
举报
回复
TianGuangZao(天光早) 说得很有道理,以前从来没有真正关心过这些问题,刚才仔细看了一下VC反汇编的代码,果然有些学问:
w=x++*x++*x++
这个表达式和大家说的一样,先取x值进行连乘,然后进行3次自加
z=--y*--y*--y
这个表达式就有点不同了,首先y自减两次,取y相乘,y再自减一次,再和上次相乘的结构相乘。因此,z=2*2*1=4。
想一想句法分析的原理,乘法是左结合的,生成的是二叉运算树,大概知道是怎么回事了
多写高人指点~
qufan
2003-11-12
打赏
举报
回复
路过 觉得怎么写代码的人是给自己找麻烦!!!
kdush
2003-11-12
打赏
举报
回复
感谢TianGuangZao(天光早) !你说的的确有道理,
但楼主,单纯的研究w,z的结果是毫无意义的。要知道这样的代码在编程中出现是无法容忍的,它的结果也会因为编辑器的不同而不同!
changshengjian
2003-11-12
打赏
举报
回复
z应该等于1啊
TianGuangZao
2003-11-12
打赏
举报
回复
首先在程序中写这样的代码是绝对应该避免,无可移植性,无可读性,容易出错,但讨论这样的代码绝对是有意义的,说别人有病的人都忘了自己是怎么过来的,当初又是如何苦苦思索的,你总不能因为你懂了,就可以剥夺别人求知的欲望。
首先老师喜欢出这类题目,决不是说明老师水平低,他不懂,故意刁难。
这类题目可以考察你对运算符优先级的理解:
w=x++*x++*x++
* 和 ++ 哪个优先呢?
表达式是按怎样的次序进行求值的,它是如何被分析的:
为什么取的是 x++ 而不是 x+ 呢?其中依据的是什么原理,如果以后你自己来写句法分析,你该如何实现呢?
让你知道不同的编译器对标准里未定义的行为,可能实现不同:
是先从表达式左边开始求值,还是该从表达式右边开始?
z=--y*--y*--y
是先把所有的 --y 求出来,再代入公式,如: z= 3*3*3
还是先求一个个求得再代入,如 z = 3*2*1
你会发现竟然有如此多的组合,也就明白了为什么给出明确答案是没有意义的。
促使你去深入的了解 ++y, y++ ,中间到底有哪些动作,是先取值,再加1,还是先加1,再取值等等。
我想学程序,总不能都循规蹈矩吧!只有平时多看些反面教材,适当钻一些”牛角尖“,你才会在以后的工作中知道哪些是你应该避免的。
UEAnswer
2003-11-11
打赏
举报
回复
箫剑说的也是,是不是写错了,优先级问题我也不清楚,但是的确w没有初值。
怎么做,等待大家的回答,我也不知道现在
edwardpro
2003-11-11
打赏
举报
回复
w=x++*w++*w++这句如果改成w=w++*w++*w++还有点价值,楼主这样就。。。不过某些老师可能喜欢这么考人。
tomsx
2003-11-11
打赏
举报
回复
油饼
xjsean
2003-11-11
打赏
举报
回复
就按你写的程序来计算吧,也有问题呀,你的w是int型变量,没有赋初值,而第三行的w=x++*w++*w++,这样的式子有意义吗???
sttony
2003-11-11
打赏
举报
回复
写这样的代码毫无意义,对于这种优先级容易发生混淆的地方,应该用()明确指明先后顺序,写的代码不仅给机器看还要给人看。
实验三 数据类型,
运算符
实验目的及要求 1、掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法 2、掌握不同类型数据之间的赋值规律; 3、学会使用C有关的算术
运算符
以及包含这些
运算符
的表达式
Java
运算符
的常见
问题
与用法小结
主要介绍了Java
运算符
,结合实例形式总结分析了Java各种常见
运算符
,包括算术
运算符
、比较
运算符
、逻辑
运算符
、位
运算符
等相关功能、原理与使用技巧,需要的朋友可以参考下
MySQL 数据类型和
运算符
Re: MySQL 数据类型和
运算符
=============================# 数据类型 整数类型:五种 TINY SMALL MEDIUM INT BIG 浮点和定点小数类型:三种 FLOAT DOUBLE DECIMAL 日期与时间数据类型:五种 YEAR -1 字符串类型:二种 CHAR(M) VARCHAR(M) -1 二进制字符串:位字段BIT 固定BINARY 可变VARBINARY -1 #
运算符
算术
运算符
比较
运算符
逻辑
运算符
位操作
运算符
运算符
的优先级-------------------------------------
内容包括从java基础语法入门到类型转换
问题
,
运算符
,数据输入,数组,方法概述,Debug模式,以及10个小案例的详细介绍。
内容包括从java基础语法入门到类型转换
问题
,
运算符
,数据输入(应用),数组,方法概述,Debug模式,以及10个小案例的详细介绍。 本内容为自己在自学后整理,不足之处还望指出(另会不断更新Java相关内容,欢迎关注)
深入理解C++移位
运算符
关于逻辑移位、算术移位可参见迅雷深大笔试题部分。的一道题。 以前看到C++标准上说,移位
运算符
(<<、>>)出界时的行为并不确定: The behavior is undefined if the right operand is negative, orgreater than or equal to the length in bits of the promoted left operand. 我当时也没有深究过这个
问题
。前几天有个网友来信问起这件事,我才发现,这和IntelCPU的移位运算有关。下面是那位网友的来信以及我的回复: 您好!
运算符
<<作为位操作中的高效的操作,但我遇到一个问
C语言
69,336
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章