问题标签 [operator-precedence]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C#define 宏
这就是我所拥有的,我想知道它是如何工作的以及它实际上做了什么。
它产生两个整数:26 和 30。
它是如何做到的?
algorithm - 如何给表达式加上括号?
我有一个想法,可以制作一个简单的程序,这将帮助我在 C 等语言中使用运算符优先级。其中最困难的部分是给表达式加上括号。例如,我想要这个:
转换为:
我在这些步骤中手动完成的:
实现这一目标的最佳方法是什么?是否已经有我可以使用的解决方案?我更喜欢在 PHP、C、C++、Python 或 Ruby 中执行此操作。
(这不是我程序的全部想法,这只是第一步。)
c# - 方法的优先顺序?
说我有两种方法。一种是由列表框中所选索引更改触发的方法。第二种方法有助于清除所有文本框、将列表框索引设置为 -1 并设置焦点。
问题:
方法二执行时,在代码中将列表框的选定索引更改为-1,从而触发第一种方法的事件触发器。方法 2 是否暂停它自己的执行并将进程转移到事件,然后在方法 1 完成后返回到它的工作......或者方法 2 是否完成其整个代码块然后转移到方法 1,因为所选索引发生了变化?
c++ - C++ 中的编译器和参数求值顺序
好的,我知道标准规定 C++ 实现可以选择评估函数的参数的顺序,但是在实际影响程序的情况下,是否有任何实现实际上“利用”这一点?
经典示例:
注意:我不是在找人告诉我不能依赖评估顺序,我很清楚这一点。我只对是否有任何编译器真的按照从左到右的顺序进行评估感兴趣,因为我的猜测是,如果他们做了很多写得不好的代码会中断(这是正确的,但他们仍然可能会抱怨)。
c++ - 是否强制使用短路逻辑运算符?和评价顺序?
ANSI 标准是否要求在 C 或 C++ 中将逻辑运算符短路?
我很困惑,因为我记得 K&R 书中说你的代码不应该依赖于这些被短路的操作,因为它们可能不会。有人可以指出标准中说逻辑操作总是短路的地方吗?我对 C++ 最感兴趣,C 的答案也很好。
我还记得读过(不记得在哪里)没有严格定义评估顺序,因此您的代码不应依赖或假设表达式中的函数将按特定顺序执行:在语句结束时所有引用的函数将被调用,但编译器可以自由选择最有效的顺序。
标准是否指明了这个表达式的评估顺序?
ruby - 这种串联的操作顺序是什么?
这有效,并允许我将两个字符串连接成一个符号,产生输出:
但是,如果我稍微更改它以使用 + 而不是分隔 hello 和 world 字符串的空格,我会收到一个错误:
这会产生以下错误 - 我认为这是因为它试图将“world”.to_sym 回调“投射”回一个字符串,然后再将其连接到“hello”字符串上:
我想知道是什么让第一个示例有效?有谁知道这里的操作顺序是什么?我怀疑这两个字符串实际上被视为一个字符串,它们之间的空格被忽略了,并且在调用 to_sym 方法之前将它们连接起来。实际上,我本来希望它的工作方式与第二个示例没有什么不同,因为我认为在尝试加入“hello”和“world”的内容之前,会在“world”字符串上调用 to_sym。
javascript - javasctipt 中的 && 和 == 运算符优先级是否重要?
更具体地说,是否存在一组值(a、b 和 c)在语句中运算符优先级很重要:
(NaN 除外)。
prolog - Prolog 运算符优先级和规则匹配
我在我的序言解释器中加载了接下来的两个事实:
现在我尝试使用该结果进行下一个查询:
现在我尝试下一个查询:
据我了解,这可以通过运算符优先级如何构建树表达式来解释:
这个解释正确吗?
ruby - 使用 ruby splat 运算符在哪里合法?
Splats 很酷。它们不仅仅用于爆炸数组,尽管这很有趣。它们还可以转换为 Array 和展平数组(请参阅http://github.com/mischa/splat/tree/master了解它们所做的详尽列表。)
看起来无法对 splat 执行额外的操作,但在 1.8.6/1.9 中,以下代码会抛出“unexpected tSTAR”:
foo = bar || *zap #=> unexpected tSTAR
而这有效:
foo = *zap || bar #=> works, but of limited value
splat 可以出现在表达式中的什么位置?
c - 理解 C 中包含“++”和“->”运算符的表达式的评估
考虑这个例子:
它打印1
。
所以我理解这是因为根据运算符优先级,->
高于++
,所以ps->num
首先获取值(即 0)然后++
运算符对其进行操作,因此将其递增为 1。
在这个例子中,我得到0
了,但我不明白为什么;第一个例子的解释应该和这个例子一样。但似乎这个表达式的计算方式如下:
首先,运算符++
进行操作,然后对 进行操作ps
,因此将其递增到下一个struct
。只有 then->
操作并且它什么都不做,因为它只是获取num
下一个字段struct
并且什么都不做。
但这与运算符的优先级相矛盾,运算符的->
优先级高于++
.
有人可以解释这种行为吗?
编辑:
在阅读了两个引用 C++ 优先级表的答案后,表明前缀++
/--
运算符的优先级低于->
,我进行了一些谷歌搜索并提出了这个链接,指出该规则也适用于 C 本身。它完全符合并完全解释了这种行为,但我必须补充一点,此链接中的表格与我自己的 K&R ANSI C 副本中的表格相矛盾。因此,如果您对哪个来源是正确的有建议,我想知道。
谢谢。