好記得很!
你能問出這個問題,說明你不擅長死記硬背,那就靠理解吧!
1 不管什麼語言,有括號一定先算括號的,這點從你小學學了以後就沒變過,你看看那些複雜點的數學函式/庫函式,像sqrt()這類的,是不是都帶括號?你自己寫個函式,在另外的地方用了,比如y=3+zijihanshu(7) 明顯就得先算括號的啊對吧。
2 考慮了括號,然後是取反啊,比如是變成非、5變成-5啊、a變成-a啊這類的,這就是個符號的問題,5+(-5)不就是5-5麼,小學數學啊,那個數正反都沒搞明白是沒法繼續運算的,你手工解a+(-b)你也一定會直接寫成a-b啊。以上這兩個都是符合人類正常思維的,有點常識感一般是不會搞錯的。
3 你認為難記的應該從這裡開始。其實也不難,你就記著,越容易導致溢位/數太大太長程式不知道該怎麼辦好的,越會優先算。比如,像求多少次方,你覺得a乘b容易數太大呢還是a的b次方容易數太大呢,你不鑽牛角尖的話顯然就是後者啦,所以多少次方的那個先算!然後你覺得a乘b和a加b哪個先最大,當然是a乘b啦,所以優先順序接著到乘除法以及取模(取模也得人家給你除一遍吧,跟做除法是一個道理),而且除法還會有不能除以0這種事,容易給程式帶來“不知道怎麼辦”的情況啊。理所當然下來是加減啦,加加減減雖然一般沒什麼事對吧,但是加得大了也會有溢位(結果太大嘛)對吧,看下移位,你只要規定不溢位就肯定沒有溢位啦,移出去就算了的那種嘛,所以移位就排在加減之後了,但是呢移位其實還可以規定移出去算溢位對吧,移位的這點不夠純粹,那就看看位運算,兩個數搞位運算不會有溢位的嘛,怎麼算都不會!所以位運算排移位的後面。再然後是比較啦,比較相比位運算結果更少啊,數更不可能大或者長啊,你想想1000100110 and 1110011010 得到的結果長 還是 1000100110 > 1110011010得到的結果長?後者得到的不是0就是1吧。
這樣你就好理解啦!其實這是根據機器和人的思維結合劃定的!對於人來說,如果一個運算要算兩小時,我當然希望溢位發生在前兩分鐘吧,千萬不要算了一小時五十分鐘了突然告訴我溢位了啊;對於機器來說,整個運算裡面的暫存器啊記憶體啊夠不夠用,當然希望前面就能大概判斷了,別整到後面數太大才告訴我不夠用啊。
所以得到的結論就是越容易把數變長變大變得不可控的,越先算。
好記得很!
你能問出這個問題,說明你不擅長死記硬背,那就靠理解吧!
1 不管什麼語言,有括號一定先算括號的,這點從你小學學了以後就沒變過,你看看那些複雜點的數學函式/庫函式,像sqrt()這類的,是不是都帶括號?你自己寫個函式,在另外的地方用了,比如y=3+zijihanshu(7) 明顯就得先算括號的啊對吧。
2 考慮了括號,然後是取反啊,比如是變成非、5變成-5啊、a變成-a啊這類的,這就是個符號的問題,5+(-5)不就是5-5麼,小學數學啊,那個數正反都沒搞明白是沒法繼續運算的,你手工解a+(-b)你也一定會直接寫成a-b啊。以上這兩個都是符合人類正常思維的,有點常識感一般是不會搞錯的。
3 你認為難記的應該從這裡開始。其實也不難,你就記著,越容易導致溢位/數太大太長程式不知道該怎麼辦好的,越會優先算。比如,像求多少次方,你覺得a乘b容易數太大呢還是a的b次方容易數太大呢,你不鑽牛角尖的話顯然就是後者啦,所以多少次方的那個先算!然後你覺得a乘b和a加b哪個先最大,當然是a乘b啦,所以優先順序接著到乘除法以及取模(取模也得人家給你除一遍吧,跟做除法是一個道理),而且除法還會有不能除以0這種事,容易給程式帶來“不知道怎麼辦”的情況啊。理所當然下來是加減啦,加加減減雖然一般沒什麼事對吧,但是加得大了也會有溢位(結果太大嘛)對吧,看下移位,你只要規定不溢位就肯定沒有溢位啦,移出去就算了的那種嘛,所以移位就排在加減之後了,但是呢移位其實還可以規定移出去算溢位對吧,移位的這點不夠純粹,那就看看位運算,兩個數搞位運算不會有溢位的嘛,怎麼算都不會!所以位運算排移位的後面。再然後是比較啦,比較相比位運算結果更少啊,數更不可能大或者長啊,你想想1000100110 and 1110011010 得到的結果長 還是 1000100110 > 1110011010得到的結果長?後者得到的不是0就是1吧。
這樣你就好理解啦!其實這是根據機器和人的思維結合劃定的!對於人來說,如果一個運算要算兩小時,我當然希望溢位發生在前兩分鐘吧,千萬不要算了一小時五十分鐘了突然告訴我溢位了啊;對於機器來說,整個運算裡面的暫存器啊記憶體啊夠不夠用,當然希望前面就能大概判斷了,別整到後面數太大才告訴我不夠用啊。
所以得到的結論就是越容易把數變長變大變得不可控的,越先算。