num >> 1在C++中的含义是什么?

问题描述:

我知道这是一个非常简单的问题,但我无法在Google上找到答案,因为它忽略了“< <”字符。如果您对我将来如何寻找这样的事情有任何建议,那也是值得赞赏的。我似乎记得它的某种偏移或某种东西?但我真的不知道这意味着什么,或者它是如何工作的,不管它是-1还是别的东西,就好像它不知道为什么这个人不会只用-1。谢谢num >> 1在C++中的含义是什么?

+2

*“我似乎记得它的某种移位或某种东西?”* - 你没有尝试寻找它?它比'>>'更友好,尤其是如果你追加'C++'。 – 2011-12-31 05:14:41

+0

阅读 - http://en.wikipedia.org/wiki/Bitwise_operation – adatapost 2011-12-31 05:14:44

+0

雅我没有意识到我记得它有点与移位有关,直到我已经写了这个句子,这是最后的,所以我觉得承诺该职位。对不起。使用它的优点是什么,因为看起来很难理解它在做什么,因为你必须首先将它转换为二进制。哦,对不起,它只是除以2,但更快的同样的事情? JK我现在注意到这个解释它的最低投票答案。 – emschorsch 2011-12-31 05:19:03

它('>>')表示在左操作数是整数类型的上下文中'右移'。对于无符号类型,uvalue >> 1等于除以2并截断值;它会删除最低有效位,将每个其他位向下移动一个位置,并在最高位插入0。对于签名类型和正值,行为是相同的;如果该值为负数,则该行为至多是实现定义的。如果左边的操作数是一个输入流,那么它是一个输入操作(但不能输入文字,如1,但可以输入变量,例如l)。

类似地,'<<'表示在左手操作数是整数类型的情况下的'左移',并且它意味着当左操作数是输出流时的输出操作。

当然,如果左边的操作数是一个类,那么该操作意味着无论类定义操作的意思。 I/O流是“类定义操作意味着什么”的特殊情况。注意如果LH操作数是一个N位整数(如果它的类型比int短),那么它只能移动一个介于0和N-1之间的RH值;任何更大或更小的转变都会产生未定义的行为请注意,特别是N移位是未定义的行为。

有关类和I/O流的注释不适用于C,但操作数都是整数的情况下,C中的行为与C++中的行为相同。

+0

对不起,左手是一个整数变量。 – emschorsch 2011-12-31 05:14:53

<<>>是移位操作符。更多信息请参阅以下内容:

http://msdn.microsoft.com/en-us/library/336xbhcz.aspx

<< N通过N. >> N在一个数字值移位的位到左侧到右侧。

http://en.wikipedia.org/wiki/Bitwise_operation#Unsigned_bit_shift_operator

它的num由一个地方二进制右移。有一个非常好的tutorial here

+0

感谢教程帮助了一堆。 – emschorsch 2011-12-31 05:27:28

将帮助的示例: int m=16; //(10000) n=m>>1; //n=(01000)导致n=8十进制。