《C++ Primer 第五版》(第4.1-4.11节) ——运算符的执行顺序问题,负值坐商取余问题,数值的移位操作

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

        

发布了72 篇原创文章 · 获赞 32 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/xx18030637774/article/details/90271907