C中的"<<"是什么意思?

Cha*_*lie 1 c bit-manipulation

这是什么意思?

#define WS_RECURSIVE    (1 << 0)
Run Code Online (Sandbox Code Playgroud)

我明白它会定义WS_Recursive (1 << 0)但是<<意味着什么?

谢谢!

Set*_*gie 21

<<左移算子.它将数字1移到左边的0位,这相当于数字1.

它通常用于创建标志,可以与|(位或)组合在一起的数字,并且可以对它们应用各种操作,例如测试是否设置了标志,设置标志,删除标志等.

它们可以组合在一起而不会相互干扰的原因是每个都是2的,这就是使用的原因1 << x,因为它产生两个幂:

1 << 0 == 2 0 == 1 ==二进制0001
1 << 1 == 2 1 == 2 ==二进制0010
1 << 2 == 2 2 == 4 ==二进制0100
1 << 3 == 2 3 == 8 ==二进制1000

您可以在这里阅读有关位标志的信息:http://www.codeproject.com/KB/tips/Binary_Guide.aspx


MBy*_*ByD 5

这有点向左移动。所以 1 << 0 实际上是 1。当你想定义一些标志时,通常使用这种方式,每个标志设置一个位,例如:

#define FLAG1 (1 << 0)
#define FLAG2 (1 << 1)
#define FLAG3 (1 << 2)
#define FLAG4 (1 << 3)
Run Code Online (Sandbox Code Playgroud)