我想知道为什么分别相当于乘法和除法的移位运算符(>)的优先级低于加法运算符,例如“+”。换句话说:int a = 1 + 2 * 8; //yields 17然而:int a = 1 + 2 << 3; //yields 24任何人都知道这种行为背后的原因是什么?注意:请不要回答我“因为规范是这样说的”!谢谢大家。编辑:我意识到可以通过对左操作数本身求和来获得左移。可能是这个原因? 最佳答案 算术运算符和按位运算符的相对优先级无关紧要,因为无论如何您都不应该将它们一起使用。如果您想将整数视为位数组,则不要像数字一样对其进行加减运算。如果你想把一个整数当作一个数字,那么不要像一个位数组那样移动、或-和-和-。坦率地说,如果我按照自己的方式行事,就不会有整数的位移操作;您必须将整数转换为BitArray类型,该类型不需要算术运算。整数被视为位数组和数字的事实是一个不幸的设计缺陷,由于历史原因而存在。位移位是一种乘法和除法的概念是一个奇怪的概念。位移位是位移位,而不是乘法。关于c# - 好奇心: why the shift operators have less priority than the additive?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7844756/
10-13 02:03