Tag: bitwise operators

使用MongoDB的官方C#驱动程序进行按位枚举(标志)查询

当我尝试运行表单的LINQ查询时: MongoCollection collection; collection.AsQueryable().Where(entity => (entity.Flags & MyFlags.AFlag) != MyFlags.None); 我得到一个带有消息Unsupported where clause: ((Int32)((Int32)entity.Flags & 4) != 0).的ArgumentException Unsupported where clause: ((Int32)((Int32)entity.Flags & 4) != 0). 这是一个已知的错误/function吗? 有没有解决方法? 从文档中可以看出,MongoDB有一个按位更新,但不是按位查询。 为了进行比较,使用ServiceStack作为客户端,相同的查询在Redis上方顺利运行。 我确实找到了建议使用JavaScript的这两个链接( link1 , link2 ),这将使服务层的实现非常依赖于DB技术。

OR(|),XOR(^),AND(&)重载

如何重载&,| C#中的^和^运算符以及重载如何工作? 我一直试图找到一些好的答案,但没有找到任何答案。 我将分享任何有用的文章。

为什么Java和C#中的逻辑运算符和按位运算符有区别?

Java和C#等语言都有按位和逻辑运算符。 逻辑运算符仅对布尔操作数有意义,按位运算符也适用于整数类型。 由于C没有布尔类型并且将所有非零整数都视为真,因此逻辑和按位运算符的存在在那里是有意义的。 但是,Java或C#等语言具有布尔类型,因此编译器可以自动使用正确类型的运算符,具体取决于类型上下文。 那么,是否有一些具体的理由在这些语言中同时使用逻辑和按位运算符? 或者他们是否因熟悉原因而被包括在内? (我知道你可以在布尔上下文中使用“按位”运算符来规避Java和C#中的短路,但我从来不需要这样的行为,所以我想这可能是一个大多未使用的特殊情况)

是否有内置函数来反转位顺序

我想出了几种手动方式,但我一直想知道是否有内置的.NET可以做到这一点。 基本上,我想要反转一个字节中的位顺序,以便最低有效位成为最高有效位。 例如:1001 1101 = 9D将变为1011 1001 = B9 关于如何执行此操作的方法是使用按位操作,如果遵循此伪代码: for (i = 0; i>1 x= byte & 1 byte >>1 y = x|y; } 我想知道是否有某个function允许我在一行中完成所有这些操作。 另外,你知道这个操作的术语,我确定有一个,但我现在记不起来了。 谢谢