? ? ? ? ? 1.運算符的執行順序問題
? ? ? ? ? 在C++語言中,沒有明確規定大多數二元運算符的求值順序,這給編譯器留下了余地,這種策略是在代碼生成效率和程序潛在缺陷之間的權衡。
? ? ? ? ? 對于運算符而言,如果運算符的兩個對象中,存在表達式指向并修改同一個對象,那么編譯器執行的先后順序會對最后的結果產生影響,因此會引發錯誤并產生未定義行為。在運算符中,只規定了四種運算符的求值順序,分別為:&&,||,?:,,。因此,對于使用運算符時,要避免出現上述問題。
? ?
? ? ? ? 2.負值坐商取余問題
? ? ? ? C++11規定,商一律向零取整,且滿足如下公式:
? ? ? ? ? ? ? ? ?(-m)/n=m/(-n)=-(m/n)? ? ? ? ? ? ? ? ? ? ? ? ? ?m%(-n)=(-m)%n=-(m%n)
? ? ? ? ? ? ? ? ?(-m)%(-n)=(m%n-n)%n
?
? ? ? ?3.數值的移位操作
? ? ? ? 在移位操作處理中,最好處理的是無符號數,符號位的處理沒有具體明確的規定。
? ? ? ? ? ? ? ? ?左移操作:往右補零
? ? ? ? ? ? ? ? ?右移操作:有符號(往左補1/0,取決于符號位),無符號(往左補零)
? ? ? ??