Glo*_*ish 288 php c# operators
我一直||在OR表达式中使用(两个管道),包括C#和PHP.偶尔我会看到一个使用的管道:|.这两种用法有什么区别?当使用一个在另一个之上时是否有任何警告或者它们是否可以互换?
Mic*_*tum 467
就像&和&&运算符一样,双运算符是一个"短路"运算符.
例如:
if(condition1 || condition2 || condition3)
Run Code Online (Sandbox Code Playgroud)
如果condition1为true,则不检查条件2和3.
if(condition1 | condition2 | condition3)
Run Code Online (Sandbox Code Playgroud)
这将检查条件2和3,即使1已经为真.由于您的条件可能是非常昂贵的功能,因此使用它们可以获得良好的性能提升.
有一个很大的警告,NullReferences或类似的问题.例如:
if(class != null && class.someVar < 20)
Run Code Online (Sandbox Code Playgroud)
如果class为null,则if语句将在class != nullfalse 之后停止.如果你只使用&,它会尝试检查class.someVar你会得到一个很好的NullReferenceException.使用Or-Operator可能不是一个陷阱,因为你不太可能触发坏事,但这是要记住的事情.
但是,除非你的设计中每个条件都是要执行的函数,否则没有人会使用单个&或|运算符.听起来像是一种设计气味,但有时(很少)这是一种干净的做事方式.该&操作者"跑这3个功能,如果其中一个返回false,执行else块",而|不会"只如果没有返回false运行else块" -可能是有用的,但正如所说,往往这是一个设计闻.
然而,第二次使用|和&运算符:按位运算.
Eva*_*haw 77
|| 是逻辑OR运算符.听起来你基本上知道那是什么.它用于条件语句,如if,while等.
condition1 || condition2
Run Code Online (Sandbox Code Playgroud)
如果condition1 OR condition2为true,则求值为true.
| 是按位OR运算符.它用于操作两个数字.您可以单独查看每个数字的每个位,如果其中一个位在至少一个数字中为1,那么结果位也将为1.这里有一些例子:
A = 01010101
B = 10101010
A | B = 11111111
A = 00000001
B = 00010000
A | B = 00010001
A = 10001011
B = 00101100
A | B = 10101111
Run Code Online (Sandbox Code Playgroud)
希望这是有道理的.
因此,为了回答最后两个问题,除了"了解两个运营商之间的区别"之外,我不会说任何警告.它们不可互换,因为它们完成两件完全不同的事情.
nsa*_*ers 29
一个是"按位或".
10011b | 01000b => 11011b
另一个是逻辑或.
true或false => true
Tre*_*ell 12
好问题.这两个运算符在PHP和C#中的工作方式相同.
| 是一个按位OR.它将比较两个值的位.例如1101 | 0010 = 1111.这在使用位选项时非常有用.例如,读= 01(0X01)写= 10(0X02)读写= 11(0X03).一个有用的例子是打开文件.一个简单的例子是:
File.Open(FileAccess.Read | FileAccess.Write); //Gives read/write access to the file
Run Code Online (Sandbox Code Playgroud)
|| 是一个逻辑OR.这是大多数人对OR的看法,并根据他们的真相比较两个值.我要去商店,否则我会去商场.这是代码中最常用的一个.例如
if(Name == "Admin" || Name == "Developer") { //allow access } //checks if name equals Admin OR Name equals Developer
Run Code Online (Sandbox Code Playgroud)
PHP资源:http://us3.php.net/language.operators.bitwise
C#资源:http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx
小智 10
& -(条件 1 和条件 2):即使第一个为假,也会检查这两种情况
&& - (条件 1 && 条件 2):如果第一种情况为假,则不必费心检查第二种情况
&& - 运算符将使您的代码运行得更快、更专业 & 很少使用
| -(条件 1 | 条件 2):即使情况 1 为真,也会检查两种情况
|| -(条件 1 || 条件 2):如果第一个情况为真,则不必费心检查第二个情况
|| - operator 将使您的代码运行得更快、更专业 | 很少使用
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;
}
}
Run Code Online (Sandbox Code Playgroud)
输出 :
using double pipe
x = 5
y = 0
using single pipe
x = 5
y = 5
Run Code Online (Sandbox Code Playgroud)