C#中的“>>”运算符有什么作用?我在一段代码中遇到了这个语句:Int32medianIndex=colorList.Count>>1;colorList是类System.Drawing.Color的列表。现在语句应该检索列表的中间索引..就像它的半点..但我不明白>>符号是如何工作的以及“1”应该如何给出中间索引..我会很感激一些帮助:S>>操作员执行位移。表达式>>1几乎与/2相同,因此程序员正在计算索引colorList.Count/2,这是**中位数。要理解为什么会这样,您需要查看所涉及数字的二进制表示。例如,如果列表中有25个元素:n:00011001=25n>>1:00001100=12通常在实际要执行此操作时使用位运算符划分时是不好的做法。这可能是一个过早的优化,因为程序员认为执行按位运算比执行除法更快。写一个除法会使它更清晰,如果这两种方法的性能相当,我也不会感到惊讶。*对于所有正整数和所有负偶数,表达式x>>1给出与x/2相同的结果。但是,对于负奇数,它会给出不同的结果。例如-101>>1==-51和-101/2==-50。**实际上,只有当列表中的元素数量为奇数时,才会以这种方式定义中位数。对于偶数个元素,该方法严格不给出中位数。这是一个按位运算符,我刚刚从http://en.wikibooks.org/wiki/C_Sharp_Programming/Operators中获取了一个定义:二元运算符>>计算其操作数,并返回右移第一个参数的结果指定的位数。它丢弃超出其第一个参数大小的低位,并将新的高位设置为第一个参数的符号位,如果第一个参数是无符号的,则设置为零。它基本上除以2...>>是按位右移运算符,将colorList.Count右移1或多或少等于colorList.Count/2。a>>b右移可以定义为a/2^b。至于为什么要使用右移而不是除以2,我不知道。C程序员(我已经为他们工作了20多年)经常使用2的幂的按位乘法或除法。原因是在较旧的体系结构(想想2MHz处理器、32KRAM、无磁盘)上,它的转换速度要快得多,并且通常编译成一条机器指令。尽管这些天我主要是写C#,但有时我仍然会把这个技巧作为一种习惯。大多数C#程序员从未见过的另一个常见C约定是在条件中嵌入赋值。例如:if((a=getmeanumber())==0)/*做某事*/;无论如何,关于原始问题及其使用原因,它们基本上不再存在,除了在每个字节和时钟周期都很重要的嵌入式编程的有限领域中。这不是可读性很强的代码,基本上它只是将数字除以2。>>是右移运算符,它将所有位向右移动一位。0110(6)变成0011(3)以上是C#学习教程:C#中的“>>”运算符是干什么用的?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
