繁体   English   中英

在C中“ <<”是什么意思?

[英]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。

我还注意到您从中获取代码的地方还有:

#define WS_RECURSIVE    (1 << 0)
#define WS_DEFAULT  WS_RECURSIVE
#define WS_FOLLOWLINK   (1 << 1)
#define WS_DOTFILES     (1 << 2)
#define WS_MATCHDIRS    (1 << 3)

这是一种创建位字段的方法 ,在该字段中 ,您将OR( | )标志在一起,然后将它们&& )标志在一起,以检查是否已设置它们。

<<操作符将左值左移(右值)位。 您的示例不执行任何操作! 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM