我想問一個(gè)簡(jiǎn)單的問題。我提供了一個(gè)非常簡(jiǎn)單的計(jì)算示例,我收到的結(jié)果與我的預(yù)期不同。有人可以解釋我做錯(cuò)了哪一步嗎?public static void main(String[] args) { int x =1; int y = 101; int a = 2; int z = ++y + y * a << 3 *2 * ++x + (x+=2); /* Step 1 int z = ++y + y * a << 3 *2 * ++x + (3); Step 2 int z = 102 + 102 * 2 << 3 *2 * 4 + (3); Step 3 int z = 102 + 204 << 24 + (3); Step 4 int z = 306 << 27; Expected:41,070,624,768? */ System.out.println(z); //Actual: 20,054,016 }
1 回答

慕的地8271018
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
位移運(yùn)算符的優(yōu)先級(jí)低于加法運(yùn)算符,加法運(yùn)算符的優(yōu)先級(jí)低于乘法運(yùn)算符,乘法運(yùn)算符的優(yōu)先級(jí)低于遞增/遞減運(yùn)算符。另請(qǐng)注意,變量是從左到右評(píng)估的,而不管它們之間的運(yùn)算符的優(yōu)先級(jí)如何。
int z = ++y + y * a << 3 *2 * ++x + (x+=2);
首先,做增量。
102 + 102 * 2 << 3 * 2 * 2 + 4
接下來(lái),做乘法。
102 + 204 << 12 + 4
然后做加法。
306 << 16
位移導(dǎo)致20054016
.
看起來(lái)你在評(píng)估x
最右邊的表達(dá)式時(shí)犯了錯(cuò)誤。
添加回答
舉報(bào)
0/150
提交
取消