当前位置:首页 » 编程语言 » c语言从右往左看
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言从右往左看

发布时间: 2022-10-02 20:31:51

c语言,条件运算符:,结合方向从右到左是什么意思,求详解

之前的回答有误,应以此为准,转自网页链接

条件运算符?:是右结合的。因此,表达式

a ? b : c ? d : e

a ? b ? c : d : e

分别等同于

a ? b : (c ? d : e)

a ? (b ? c : d) : e


以下为之前的原答案,为了大家知道评论区在说什么,特此保留

#include<stdio.h>

intmain(){
intx=1,y=2;
intc=0;
(x>y?printf("1"):(c==0)?printf("2"):printf("3"));/*这里就是从右到左结合
先把(c==0)?printf("2"):printf("3")当成一个整体
再把(x>y?printf("1"):(c==0)?printf("2"):printf("3"));当成一个整体*/
return0;
}

输出是2

㈡ c语言中条件运算 结合方向 从右到左 什么意思

在标准C语言的文档里,对操作符的结合性并没有作出非常清楚的解释。一个满分的回答是:它是仲裁者,在几个操作符具有相同的优先级时决定先执行哪一个。 每个操作符拥有某一级别的优先级,同时也拥有左结合性或右结合性。优先级决定一个不含括号的表达式中操作数之间的“紧密”程度。例如,在表达式a*b+c中,乘法运算的优先级高于加法运算符的优先级,所以先执行乘法a*b,而不是加法b+c。 但是,许多操作符的优先级都是相同的。这时,操作符的结合性就开始发挥作用了。在表达式中如果有几个优先级相同的操作符,结合性就起仲裁的作用,由它决定哪个操作符先执行。像下面这个表达式: int a,b=1,c=2; a=b=c; 我们发现,这个表达式只有赋值符,这样优秀级就无法帮助我们决定哪个操作先执行,是先执行b=c呢?还是先执行a=b。如果按前者,a=结果为2,如果按后者,a的结果为1。 所有的赋值符(包括复合赋值)都具有右结合性,就是说在表达式中最右边的操作最先执行,然后从右到左依次执行。这样,c先赋值给b,然后b在赋值给a,最终a的值是2.类似地,具有左结合性的操作符(如位操作符“&”和“|”)则是从左至右依次执行。

㈢ a<b<c在c语言中看的顺序是右到左还是左到右

没关,标准C中规定的<的结合性是左结合 也就是从左向右算
这样来看 a<b是假,值为0,然后 0<c 值为真,所以表达式的值为真

㈣ c语言参数传递是从右到左的吗

是的,C语言函数参数一般是从右往左执行的

㈤ C语言运算的时候到底是从左往右还是从右往左算啊

相同优先级从左到右,否则先算高优先级
比如5+6*7是先算6*7再算5+42
5+6+7就是先算5+6再算11+7

㈥ c语言中运算符的结合方向什么时候从左至右,什么时候从右至左

左结合性:自左至右。

右结合性:自右至左。

一个运算量两侧的运算符优先级相同时,按运算符的结合性所规定的结合方向处理。C语言中各运算符的结合性分为两种,即左结合性和右结合性。

如,算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。

而最典型的右结合性运算符是赋值运算符,如x=y=z,由于“=”的右结合性,应先执行y=z,再执行x=(y=z)运算。



(6)c语言从右往左看扩展阅读

C语言中的运算符

(1)算术运算符(+,-,*,/,%,++,--)。

(2) 关系运算符(<, >, <=, >=, ==, ![KG-*8]=) 。

(3) 逻辑运算符(!, &&, ||) 。

(4) 位运算符(<<, >>, ~, |, ^, &) 。

(5)赋值运算符(=,及其双目运算符的扩展赋值运算符)。

(6)条件运算符(?:)。

(7)逗号运算符(,)。

(8) 指针运算符(*, &) 。

(9)求字节数运算符(sizeof)。

(10)强制类型转换运算符((类型))。

(11) 分量运算符(·, ->) 。

(12)下标运算符([])。

(13)圆括号运算符(())。

㈦ 请教c语言等编程语言优先级的问题,对着这个优先级的表看得不是很明白,有的从左往右,有的从右往左

运算符涉及到优先级和结合性问题,”从左往右“和”从右往左“说的是运算符的结合性。优先级决定表达式中各种不同的运算符起作用的优先次序,而结合性则在相邻的运算符的具有同等优先级时,决定表达式的结合方向。可以这样理解:
首先,表达式中得有多个运算符,这样就存在左右两边都有运算符的操作数:
1 如果这个操作数两边的运算符优先级不同,则这个操作数属于优先级高的那个运算符,它优先参与优先级高的运算符表示的运算;
2 如果这个操作数两边的运算符优先级相同,则这个操作数属于左右那个运算符,就要看着两个运算符的结合性了(注意,相同优先级的运算符必然有相同的结合性,否则此处就出现bug了),如果运算符结合性是”从左到右“,则操作数属于左侧的运算符,就是说运算符是从左侧开始处理的;如果结合性是”从右到左“,则操作数属于右侧的运算符,这两个同优先级的运算符右侧的先处理。
结合性举例:
(1) a + b - c
b就是前面说的两边有两个相同优先级的操作数,+ 和 - 的结合性是”从左到又“,所以 + 先处理,- 后处理。
(2) a = b = c
b两边有两个相同优先级的运算符,= 结合性是”从右到左“,所以右侧的 = 先处理,a = b = c 等价于 a = (b = c);同理,a = b += c 等价于 a = (b += c),因为 + 和 += 是相同优先级的。
(3) *p++
p左右的两个运算符优先级相同,但都是”从右到左“结合性,所以这样理解:*(p++)。

㈧ c语言printf函数运算顺序为什么从右到左

不是printf函数运算顺序为什么从右到左,而是类似的所有函数,包括算定义函数的参数计算都是从右至左。函数数有多个参数时计算总得有个顺序吧?不是从左至右,就是从右至左,抑或从中间向两边;一句话选定一个顺序后就“大家都这么办”,总不能有些函数从左至右,有些函数从右至左吧,那编译器就太难做了。当初选择从右至左肯定是这样有好多方便之处,比如printf中的参数表,由于C是基于栈操作的,栈又是后进先出的,从右至左计算压栈,然后按弹出顺序输出到屏幕上刚好顺应了大多数文本从左至右的习惯,很是方便;若从左至右计算压栈,那也不是说不可以,但处理就没有这么方便了。个人管见,供参考。

㈨ C语言中的从右向左的运算问题

给你一个例子,你就应该明白了; int x; int y=4; x = y++; 这个的结果,相信你应该知道,x = 4,y =5; 也就是说对于表达式y++而言,它的值是未加之前的值4,也就是说(y++)的结果是4; 同理,对于x = *(p++),首先,(p++)这个表达式的结果是p,也就是说(p+1)并不影响(p++)这个表达式的结果,所以x = *p,; 这个是由于自加运算表达式的特性决定的,这样理解就不会有错了