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,取决于符号位),无符号(往左补零)