[英]What does '<<' mean in C?
这是什么意思?
#define WS_RECURSIVE (1 << 0)
我知道它将定义WS_Recursive (1 << 0)
但是<<
是什么意思?
谢谢!
<<
是左移运算符 。 它将数字1
左移0
位,这等效于数字1
。
它通常用于创建标志 ,可以与|
组合在一起的数字 (位或)和各种操作可以应用到它们,例如测试是否设置了标志,设置了标志,删除了标志等。
它们可以组合在一起而不会互相干扰的原因是,每个都是2的幂 ,这就是使用1 << x
的原因,因为这产生了2的幂:
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)
<<
操作符将左值左移(右值)位。 您的示例不执行任何操作! 1左移0位仍为1。但是1 << 1
是2,1 1 << 2
是4,依此类推。WS_RECURSIVE是位域中的标志吗?
有点变化。 (1 << 1)
是2
并且(1 << 2)
是4
。 (1 << 0)
是1
,这很愚蠢,但至少它是在编译时预先计算的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.