java与或优先级证明_Java-如何证明与的优先级比或的高

#include

using namespace std;

int main(void)

{

int a = 0;

int b = 0;

int c = 0;

bool bb = (cout << "a = " << a << endl, a) ||

(cout << "b = " << b << endl, b) &&

(cout << "c = " << c << endl, c);

cout << "bb = " << bb << endl;

return 0;

}

C++ 的代码稍微一看就明白了,在小括号里面可以用逗号表达式来打印运算顺序

默认 A || B && C 时:

A = false,B = false,C 任意 顺序为:A B,bb = false

A = false,B = true,C = false 顺序为:A B C,bb = false

A = false,B = true,C = true 顺序为:A B C,bb = true

A = true, B、C 任意 顺序为:A,bb = true

添加上小括号修改顺序为 A || ( B && C ) 时:

A = false,B = false,C 任意 顺序为:A B,bb = false

A = false,B = true,C = false 顺序为:A B C,bb = false

A = false,B = true,C = true 顺序为:A B C,bb = true

A = true, B、C 任意 顺序为:A,bb = true

添加上小括号修改顺序为 (A || B ) && C 时:

A = false,B = false,C 任意 顺序为:A B,bb = false

A = false,B = true,C = false 顺序为:A B C,bb = false

A = false,B = true,C = true 顺序为:A B C,bb = true

A = true, B 任意,C = false 顺序为:A C,bb = false

A = true, B 任意,C = true 顺序为:A C,bb = true

编译器在处理表达式的时候要先从左向右读取一边做词义和语义分析,

分析之后就已经做好了逻辑运算的短路处理。

不难看出 A || B && C 与 A || ( B && C ) 结果一样,说明什么,就不言而喻了

更新

至于 || 与 && 谁先计算,这个问题就像 1 + 2 * 3 一样,1 永远比 (2 * 3) 先放入累加器

这并不影响 * 比 + 的优先级高。

1 + 2 * 3 等价于 1 + (2 * 3)

A || B && C 同样等价于 A || (B && C)

以上结果来自 linux 3.6, gcc 4.7

如果要在 java 里面做此类操作的话,只需要把 中间那部分代码贴到 main 里面,然后修改就可以得出同样的结论喽

int a = 0;

int b = 0;

int c = 0;

boolean bb = (System.out.println("a = " + a), a) ||

(System.out.println("b = " + b), b) &&

(System.out.println("c = " + c), c);

System.out.println("bb = " + bb);

祝好,

斑驳敬上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值