lzth.net
当前位置:首页 >> C语言中:y=++x*++x与y=(++x)*(++x)为何结果不同? >>

C语言中:y=++x*++x与y=(++x)*(++x)为何结果不同?

这是一个运算符号优先级的问题:' ++ ' > '()' > ' * '.所以:y=++x*++x相当于y=x*(x+1),y=(++x)*(++x)相当于y=(x+1)*(x+2).

#include main() { float x=1,y; y=++x*++x; printf("x=%f\ny=%f",x,y); }答案是 x=3.000000 y=6.000000 float型 如果是int型 那么答案是 x=3 y=9

这与C语言的操作符的优先顺序和括号的结合律有关:1.同一级运算按照从左到右的顺序依次进行2.括号优先3. ++x运算将x值加一然后返回x值 所以你这个表达式的运算顺序为:1. x = 42. 运算左 (++x) 导致 x = 5 ,且 (++x) 变为 (x)3. 运算右 (++x) 导致 x = 6,且 (++x) 变为 (x)4. 此时运算 (x) + (x) ;而此时 x = 6; 因此 y = 12

y=++x+(x++); y=(++x)+(x++);y=x+++(x++); y=(x++)+(x++);(++x) 和 (x++) 都会引起后面的x增加1;但是它们的取值不同,++x 值比 x++ 大1.

是小数位的不同,整型只要整数部分.浮点型保留六-八位小数部分.

首先比较++和*(指针)的优先级,++较高.那么*x++就是取x指向内存的值,然后x+=1;(*x)++是x指向内存的值,然后其内存的值自增1.++*x 是x指向内存的值先自增1,在取该值.*++x 是x先+=1,在取其指向内存的值.

++操作只能对应与整形,比如:int , Char,等..浮点型的当然不行了!!

x = y 是赋值运算,把y的值赋值给x;x==y 是比较运算,比较x和y是否相等;

if(x==y)是判断x与y是否相等,相等则为真,不等则为假 if(x=y)这个是把y的值赋给x,然后判断表达式x=y的值,c语言中,赋值表达式是有值的,它的值是赋值符号右边的值,即x=y的值是y的值,如果y的值为0,那么x=y为假,否则为真 一般来讲,编程过程中if(x=y)这种写法是错误的写法,程序能够通过编译,也能够运行,但是可能会出现意料之外的结果.

对++i和i++的解释: 解释程序:printf("%d\n",++x+y++);++x后x=7与y相加后是12然后y变成6以后的同理

网站首页 | 网站地图
All rights reserved Powered by www.lzth.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com