Questions tagged «operator-precedence»

运算符优先级是指控制以编程语言在表达式或语句中评估运算符的顺序的规则。与[执行顺序]不同,后者涵盖了软件系统中执行事件的顺序。


10
'AND'vs'&&'作为运算符
我有一个代码库,开发人员决定使用ANDand OR代替&&and ||。 我知道运算符的优先级(&&之前and)有所不同,但是使用给定的框架(准确地说是PrestaShop),这显然不是原因。 您正在使用哪个版本?是and不是更具有可读性&&?还是没有区别?

14
为什么x ==(x = y)与(x = y)== x不同?
考虑以下示例: class Quirky { public static void main(String[] args) { int x = 1; int y = 3; System.out.println(x == (x = y)); // false x = 1; // reset System.out.println((x = y) == x); // true } } 我不确定Java语言规范中是否有一项规定要加载变量的先前值以便与右侧(x = y)进行比较,根据括号中的顺序,应该首先计算该右侧()。 为什么第一个表达式求值false,而第二个表达式求值true?我本来希望(x = y)先被评估,然后再x与自身(3)比较并返回true。 这个问题与Java表达式中子表达式的求值顺序不同,因为x这里绝对不是“子表达式”。需要加载它以进行比较,而不是对其进行“评估”。这个问题是特定于Java的x == (x = y),与通常为棘手的面试问题设计的牵强的不切实际的构造不同,该表达式来自一个真实的项目。它原本应该是“一键替换”成语的单行替换 …


1
为什么([1,0]中的1 = = True)评估为False?
在查看该问题的答案时,我发现自己不明白自己的答案。 我真的不明白这是如何解析的。为什么第二个示例返回False? >>> 1 in [1,0] # This is expected True >>> 1 in [1,0] == True # This is strange False >>> (1 in [1,0]) == True # This is what I wanted it to be True >>> 1 in ([1,0] == True) # But it's not just a …

7
是否必须使逻辑运算符短路?和评估顺序?
ANSI标准是否要求在C或C ++中使逻辑运算符短路? 我很困惑,因为我回想起K&R的书,说您的代码不应该依赖这些操作的短路,因为它们可能不是。有人可以指出标准中逻辑运算总是短路的地方吗?我对C ++最为感兴趣,对于C的回答也很好。 我还记得读(不记得在哪里)未严格定义评估顺序,因此您的代码不应依赖或假定表达式中的函数将按特定顺序执行:在语句末尾,所有引用的函数会被调用,但是编译器可以自由选择最有效的顺序。 标准是否指示此表达式的评估顺序? if( functionA() && functionB() && functionC() ) cout<<"Hello world";

5
为什么在真实情况下带逗号的三元运算符只求一个表达式?
我目前正在使用C ++ Primer一书学习C ++,这本书中的练习之一是: 说明以下表达式的作用: someValue ? ++x, ++y : --x, --y 我们知道什么?我们知道,三元运算符的优先级高于逗号运算符。对于二元运算符,这很容易理解,但是对于三元运算符,我有点挣扎。对于二进制运算符,“具有更高的优先级”意味着我们可以在具有更高优先级的表达式周围使用括号,并且不会更改执行。 对于三元运算符,我将执行以下操作: (someValue ? ++x, ++y : --x, --y) 有效地产生相同的代码,这无助于我理解编译器如何对代码进行分组。 但是,通过使用C ++编译器进行测试,我知道表达式可以编译,而且我不知道:运算符本身可以代表什么。因此,编译器似乎正确地解释了三元运算符。 然后,我通过两种方式执行该程序: #include <iostream> int main() { bool someValue = true; int x = 10, y = 10; someValue ? ++x, ++y : --x, --y; std::cout << …


7
Javascript三元运算符的运算符优先级
我似乎无法与三元运算符结合使用此代码的第一部分(+ =)。 h.className += h.className ? ' error' : 'error' 我认为这段代码的工作方式如下: h.className = h.className + h.className ? ' error' : 'error' 但这是不正确的,因为这会导致控制台出现错误。 所以我的问题是我应该如何正确插入此代码?

7
在C ++中执行语句顺序
假设我有许多要按固定顺序执行的语句。我想在优化级别2中使用g ++,因此某些语句可以重新排序。一个人必须使用哪些工具来强制执行某种语句排序? 考虑以下示例。 using Clock = std::chrono::high_resolution_clock; auto t1 = Clock::now(); // Statement 1 foo(); // Statement 2 auto t2 = Clock::now(); // Statement 3 auto elapsedTime = t2 - t1; 在此示例中,以给定顺序执行语句1-3非常重要。但是,编译器是否不能认为语句2独立于1和3并按以下方式执行代码? using Clock=std::chrono::high_resolution_clock; foo(); // Statement 2 auto t1 = Clock::now(); // Statement 1 auto t2 = Clock::now(); // …

4
方法链中的C ++执行顺序
该程序的输出: #include <iostream> class c1 { public: c1& meth1(int* ar) { std::cout << "method 1" << std::endl; *ar = 1; return *this; } void meth2(int ar) { std::cout << "method 2:"<< ar << std::endl; } }; int main() { c1 c; int nu = 0; c.meth1(&nu).meth2(nu); } 是: method 1 …

3
SQL Server中一个奇怪的操作问题:-100 / -100 * 10 = 0
如果执行SELECT -100/-100*10,结果为0。 如果执行SELECT (-100/-100)*10,结果为10。 如果执行SELECT -100/(-100*10),结果为0。 如果执行SELECT 100/100*10,结果为10。 BOL指出: 当表达式中的两个运算符具有相同的运算符优先级时,将根据它们在表达式中的位置从左到右进行评估。 和 Level Operators 1 ~ (Bitwise NOT) 2 * (Multiplication), / (Division), % (Modulus) 3 + (Positive), - (Negative), + (Addition), + (Concatenation), - (Subtraction), & (Bitwise AND), ^ (Bitwise Exclusive OR), | (Bitwise OR) BOL是错误的,还是我缺少什么?似乎-取消(预期)优先顺序。


2
“ C ++编程语言”第4版第36.3.6节中的代码是否具有明确的行为?
在Bjarne Stroustrup的C ++编程语言第4版第36.3.6 STL类操作中,以下代码用作链接的示例: void f2() { std::string s = "but I have heard it works even if you don't believe in it" ; s.replace(0, 4, "" ).replace( s.find( "even" ), 4, "only" ) .replace( s.find( " don't" ), 6, "" ); assert( s == "I have heard it works …

1
优先级和位掩码操作
我遇到了一个(看似)非常奇怪的案例。 取数字2(0b10)并用1(0b01)对其进行位掩码 这应产生0b00等于0的值。 但是,这里是薛定ding先生进来的地方: var_dump(0b10 & 0b01); // int(0) var_dump(0b10 & 0b01 == 0); // int(0) var_dump(0b10 & 0b01 != 0); // int(0) 威士忌酒。探戈 狐步舞。 坦率地说,对于按位运算符,我不是最聪明的人-所以也许我在某个地方犯了可怕的错误? 但是,在Python中: 0b10 & 0b01 == 0 = True 0b10 & 0b01 != 0 = False ...所以?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.