Maj*_*ajd 7 .net c# syntax operators
我在一段代码中遇到了这个声明:
Int32 medianIndex = colorList.Count >> 1;
Run Code Online (Sandbox Code Playgroud)
colorList是一个班级列表System.Drawing.Color.
现在该语句应该检索列表的中间索引..就像它的半点..但我无法理解该>>符号是如何工作的以及"1"应该如何给出中位数索引..我会感谢一些帮助:S
Mar*_*ers 12
的>>运算符执行比特移位.
表达式>> 1几乎相同,/ 2因此程序员计算的指数colorList.Count / 2是**中位数.要理解为什么会出现这种情况,您需要查看所涉及数字的二进制表示.例如,如果列表中有25个元素:
n : 0 0 0 1 1 0 0 1 = 25
\ \ \ \ \ \ \
n >> 1: 0 0 0 0 1 1 0 0 = 12
Run Code Online (Sandbox Code Playgroud)
一般情况下,当你真正想要执行除法时使用按位运算符是一种不好的做法.这可能是一个过早的优化,因为程序员认为执行按位操作而不是除法更快.写一个部门会更清楚,如果两种方法的表现相当,我也不会感到惊讶.
*该表达式x >> 1给出与x / 2所有正整数和所有负偶数整数相同的结果.然而,它给出了负奇数整数的不同结果.例如,-101 >> 1 == -51而-101 / 2 == -50.
**实际上,如果列表具有奇数个元素,则仅以这种方式定义中值.对于偶数个元素,这种方法严格来说不会给出中位数.