c# - 在这种情况下使用按位与 (&)

标签 c# .net

我已经看到一些关于 SO(here 等)的 & 的解释(以及大量的 | 的解释),但没有一个阐明了& 在以下场景中:

else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)  {...}

取自MSDN

谁能解释一下,具体到这个用法?

谢谢。

最佳答案

e.AllowedEffect 可能是按位标志的组合。 & 运算符对每一位执行一点“与”逻辑运算。结果,如果被测位为 1,则结果为该单个标志。 测试可以用这种方式编写,结果完全相同:

else if ((e.AllowedEffect & DragDropEffects.Move) != 0 )  {...}

让我们用一个例子更好地解释,标志值是这些:

None = 0,

    Copy = 1,

    Move = 2,

    Link = 4,

所以在二进制中:

无 = 00000000,

Copy = 00000001,

Move = 00000010,

Link = 00000100,

所以我们考虑在测试中我们有 Copy 和 Move 组合的情况,即值将是:

00000011

通过按位和移动我们有:

00000011  -->Copy | Move
00000010  -->Move
======== &
00000010 === Move

关于c# - 在这种情况下使用按位与 (&),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30616403/

相关文章:

c# - 在 MapReduce 中使用 Windows Azure 存储执行 Reduce 函数后无法看到最终结果

c# - 从组中获取平均时间跨度

c# - 获取Windows 8自动颜色主题的激活颜色

java - C# 之于 .NET 就像 Java 之于 Java?

c# - Visual Studio 和 .NET 中的条件文件编译

.net - FluentAssertions : check a list contains an object, 不包括属性

c# - Convert.ToDouble(object) 中的小数精度是否取决于文化?

c# - 在单元测试中发送错误的 UDP/IP 数据报(故意)?

c# - 在 razor 文件中显示构建日期 (Blazor)

.net - 在 WCF 中序列化 SQLParameter 的任何解决方案或解决方法?