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
这有点向左移动。所以 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)