我总是在OR表达式中使用||(两个管道),无论是在c#还是PHP中。我偶尔会看到使用单个管道:|。这两种用法有什么区别?使用其中一种时有什么注意事项吗?或者它们是可以互换的吗?
当前回答
java中的简单示例
public class Driver {
static int x;
static int y;
public static void main(String[] args)
throws Exception {
System.out.println("using double pipe");
if(setX() || setY())
{System.out.println("x = "+x);
System.out.println("y = "+y);
}
System.out.println("using single pipe");
if(setX() | setY())
{System.out.println("x = "+x);
System.out.println("y = "+y);
}
}
static boolean setX(){
x=5;
return true;
}
static boolean setY(){
y=5;
return true;
}
}
输出:
using double pipe
x = 5
y = 0
using single pipe
x = 5
y = 5
其他回答
单个管道(|)是按位的OR操作符。
Two pipes(||)是逻辑或运算符。
它们是不可互换的。
单个管道|是位操作符之一。
从维基百科:
在C编程语言家族中,按位的OR运算符是“|”(管道)。同样,此操作符不能与布尔“逻辑或”对应的操作符混淆,后者将其操作数视为布尔值,并且写为“||”(两个管道)。
对于位|和逻辑||
OR
位&和逻辑&&
意思是if(a>b | a==0) 在第一个左边>b将被求值,然后a==0将被求值,然后|操作将被执行
但在||如果>b,那么如果不检查下一个RHS
与&和&&类似
if(A>0 & B>0)
它会计算LHS,然后RHS,然后按位& but
in(A>0 && B>0)
如果(A>0)为false(LHS),它将直接返回false;
单个管道“|”是“按位”或,应该只在知道自己在做什么的时候使用。双管“||”是一个逻辑或,可以在逻辑语句中使用,如“x == 0 || x == 1”。
这里有一个按位或的例子:如果a=0101和b=0011,那么|b=0111。如果您正在处理一个将任何非零视为真值的逻辑系统,那么按位或将以与逻辑或相同的方式起作用,但其对应的(按位和,“&”)将不是。另外按位或不执行短路计算。
||是逻辑或运算符。听起来你基本知道那是什么。它用于条件语句,如if, while等。
condition1 || condition2
如果条件1或条件2为真,则返回true。
|是位或操作符。它用于对两个数运算。你单独看每个数字的每一位,如果其中一位至少在一个数字中是1,那么结果位也将是1。下面是一些例子:
A = 01010101
B = 10101010
A | B = 11111111
A = 00000001
B = 00010000
A | B = 00010001
A = 10001011
B = 00101100
A | B = 10101111
希望你们能理解。
所以为了回答最后两个问题,我不会说除了“知道两个运算符之间的区别”之外还有什么需要注意的。它们不能互换,因为它们做的是两种完全不同的事情。
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 原则-如何打印出真正的sql,而不仅仅是准备好的语句?
- 如何从关联PHP数组中获得第一项?
- 在c#代码中设置WPF文本框的背景颜色
- PHP/MySQL插入一行然后获取id
- 在c#中,什么是单子?
- 我如何排序一个多维数组在PHP
- 如何在PHP中截断字符串最接近于一定数量的字符?
- c#和Java中的泛型有什么不同?和模板在c++ ?