什么是 |和 ^ 运算符用于什么? [重复]

问题描述 投票:0回答:6

可能重复:
什么是按位运算符?

最近我遇到了一些使用

|
^
运算符的示例。我猜这些是
or
negation
运算符。

那么这些运算符实际上代表什么?

c# .net operators
6个回答
27
投票
  • |
    =(按位/非短路)“或”
  • ^
    =“异或”

供参考,“not”(按位求反)是

~


19
投票

如果将其应用于整数类型,它们是按位或和异或运算符。 但是,如果将它们应用于布尔类型,它们是逻辑或和异或。 查看 or 运算符xor 运算符

的解释

您可以从维基百科获取有关布尔运算的更多详细信息真值表


8
投票

MSDN 上有关于所有 C# 运算符的文档:

http://msdn.microsoft.com/en-us/library/6a71f45d.aspx


编辑 - Jon B 评论说链接文档中的相关引用会很有用。

|
逻辑或运算符

二进制 |运算符是为整数类型和布尔值预定义的。对于整数类型,|计算其操作数的按位或。对于布尔操作数, |计算其操作数的逻辑或;也就是说,当且仅当两个操作数都为 false 时,结果才为 false。

^
逻辑异或运算符

二元 ^ 运算符是为整数类型和 bool 预定义的。对于整型,^ 计算其操作数的按位异或。对于 bool 操作数,^ 计算其操作数的逻辑异或;也就是说,当且仅当其操作数之一为 true 时,结果才为 true。


2
投票

它们是逻辑按位运算符

|是一个 Or 链接

^ 是异或 链接


2
投票

对于整数类型,|是按位或,^ 是按位异或,为了完整性,& 是按位与。

对于布尔类型,|是布尔值或,^ 布尔值异或和 & 布尔值 &。

相比之下,||是一个短路布尔值或 - 如果第一个操作数计算为 true,则不计算第二个操作数。 && 是一个短路布尔值,并且 - 如果第一个操作数为 false,则不计算第二个操作数。不存在短路^,因为不存在不需要评估第二个的情况。

||和 && 比 | 更常用和 & 在布尔情况下,因为通常至少会带来微小的效率增益,而不会造成损失。但是,如果右侧操作数具有在所有情况下都必须触发的副作用,那么 |或 & 将是要使用的一个。在实践中,这种情况很少见,而且味道不好(如果副作用很重要,则应在单独的表达式中对其进行评估,以使目的更清晰)。

编辑:潜在混淆的一个来源是,在某些其他语言中,整数类型可以用作布尔值(例如,您可以执行

if(53)
并且它与
if(true)
相同),这使得上述运算符之间的区别非常不同:如果使用“纯”布尔类型(只有 true 和 false 作为其可能值),它们是相同的,但其他情况下则不同。 C# 故意不允许对整型进行布尔运算,正是为了防止此类语言中存在错误的可能性。


-6
投票

^
逻辑异或

|
逻辑或

更新

在 C# 中也有逻辑运算:

    Console.WriteLine(true ^ false);  // logical exclusive-or
    Console.WriteLine(false ^ false); // logical exclusive-or
© www.soinside.com 2019 - 2024. All rights reserved.