c语言运算符有关的问题

作者&投稿:墨惠 (若有异议请与网页底部的电邮联系)
这个地方不是"运算顺序"的问题,C语言语法里根本没有规定求值顺序,有的只是运算符的优先级和结合性
由运算符优先级和结合性可知,以上表达式分别等效于
1.d=((m=(a!=b))&&(n=(b>c)))
2. x=(((y--)<=x)||((x+y)!=z))
3. ((x++)-y)+(++y)
4. ((x<y)?x:y)==(z++)
5. ((x--)>(y+x))?(5):((25>y++)?('1'):('2'))
然后代入初值可知,表达式值
1.没有初值,无法判断
2.整体表达式值为1,且最终x值为1,y值-5,z值为5

3.整体表达式值无解,因为此处涉及求值顺序问题,这是一个未定义行为,且最终x值为4,y值-3,z值为5
4.整体表达式值为0,且最终x值为1,y值2,z值为4
5.依旧是未定义行为,表达式整体值无解,且此处求值顺序涉及判断分支,故,变量x和y的最终值也是无解的
关于求值顺序的问题可参见裘宗燕的"C/C++ 语言中的表达式求值"
http://bbs.csdn.net/topics/370153775

去网上查一下运算符优先级表,按优先级和结合性去处理这些题,自己多练习就会了。

  1. d=(m=a!=b)&&(n=b>c)  

    有括号,先算括号内的

    算完两个括号内的,要算&&

    结果赋值给d

  2. m=a!=b   先算a!=b,结果赋值给m

  3. n=b>c  先算b>c,结果赋值给n



建议不要纠结这个了,编程的时候也不要写这样的表达式,用括号来清晰表明自己的意图。

c语言问题有关运算符~

1 用异或位运算
例子:
int a=3;
int b=5;

a=a^b;
b=a^b;
a=a^b;
2 临时变量没有准确的定义。但可以给你举个例子
void sw(int &a,int &b)
{
int tmp = a;
a = b;
b = tmp;
}
其中tmp就叫做临时变量。
对你问题中的“临时变量”的理解是:不能使用第三个变量~~

这句用的是条件表达式。具体到这个程序中的含义是,先比较x和y的大小,如果x>y,则执行x++,也就是说z=x++;如果x不大于y,则执行y++,也就是说z=y++.

关于C语言运算符╱的一个问题
答:1、c语言中,“/”运算符的结果,跟参与运算的双方的类型有关,一般来说,运算结果的类型取参与运算一方范围最大的类型为结果的类型。如两个整型,结果为整型;整型和浮点型,结果为浮点型。所以,老师的要求有一定道理,如果你就要取整,那也不用安按老师的要求。但是,用“/”来取整是不可靠的。因...

C语言中一道和逗号运算符有关的题目
答:其实这道题还考了 ++a和a++的问题;pad=sum++,pad++,++pad ;这句 首先 把sum的值赋给 pad 就是sum里的值 把pad里的值覆盖了,虽然两个数字一样,但表示含义不一样;在给pad赋值时 sum 还没有自加 等赋完值 才自加。接着运行pad++ 就 把5加1了 最后是++pad 所以要加完了 ...

c语言逻辑运算符问题
答:在c中&&和||都是短路运算符,像++i||++j&&++k这个表达式,++i的值为2,隐式转换为bool型为true(0转为false其他都为true),因此这个表达式等价于ture || ++j && ++k,由于短路,当||前面的值为true时就不再判断后面的语句,因此 ++j && ++k没有被执行,即j和k的值没有被改变。也就是...

C语言运算符优先级问题。为什么||比&&低
答:1)首先,你只输出了三个值,第四个值并没有输出。2)你需要明确的一点是:程序在执行printf语句的时候,其实内部是倒着来执行的,也就是说,先输出第三个%d,然后第二个%d,最后第一个%d。3)那么这就有一个问题:关于,++i和i++的区别:前者是先自增后才返回给%d,后者是先把自身的值返回...

C语言有关问题:x=-3*4%-6/5为什么等于0 ? 怎么算的?
答:此题考的知识点事算术运算符的计算。*,%,/ 的优先级一样,结合为自左向右。所以先-3*4=-12,在求﹣12除以﹣6的余数,该余数的符号与被除数一致所以为0,最后算0除以5,结果为0

求会的人帮讲下C语言中的运算符的这几个问题.
答:0 !5值为0,再顺序计算 2 5》=2的值为1,3〈5的值为0再计算 0 ++,--级别比+高 8 从右象左计算,i*=j等效i=j+i,在同一个主函数中的话就是9 1 顺序计算,有括号的优先 0 !的级别最高,&&级别最低 2 2 只打印一个数,后面的数排在前面发优先 3 从...

C语言运算符的问题
答:include "stdio.h"main(){ int a,b,c,d;printf("请输入一个三位数:\n");scanf("%d",&a);b=a%10; /* %号是求余,这里求得个位数 */ c=(a/10)%10;/* /号是求整,(a/10)假如输入的是123,此时a就变为了12,只剩下十位和百位的数了,再求余就得到了十位的数*/ d=a/...

c语言中有关复合运算符计算的问题
答:答案是98,不是56,分析如下 a+=a*=a/=a-6,展开如下 a=a+(a*=a/=a-6)a=a+(a=a*(a/=a-6))a=a+(a=a*(a=a/(a-6)))a=a+(a=a*(a=a/1))a=a+(a=a*(a=7))a=a+(a=a*7) // 注意,此时a的值是7 a=a+(a=7*7)a=a+(a=49)a=a+49 // 注意此时...

C语言逻辑运算符问题
答:C表达式中的操作符按优先级顺序结合,本表达式中运算符的优先级顺序从高到低为:()、%、==、!=、&&、||。所以表达式计算分解为:temp1=year%4;temp2=year%100;temp3=year%400;temp4=(temp1==0);temp5=(temp2!=0);temp6=(temp3==0);temp7=(temp5&&temp6);expr=(temp7||temp6);所...

C语言中逻辑运算符的规则是什么
答:1、逻辑运算符运算规则:|| 或:比如两个条件中,只要有一个成立,则结果就成立;&&与:比如两个条件中,两个同时成立,则结果成立,否则不成立;!非,就是取反之意,如果是真,结果是假,如果是假,结果是真。2、逻辑运算符是根据表达式的值来返回真值或是假值。其实在C语言中没有所谓的真值和...