답변:
그냥 같은 &
및 &&
운영자, 이중 운영자는 "단락"연산자입니다.
예를 들면 다음과 같습니다.
if(condition1 || condition2 || condition3)
condition1이 true이면 조건 2와 3을 확인하지 않습니다.
if(condition1 | condition2 | condition3)
1이 이미 참인 경우에도 조건 2와 3을 점검합니다. 조건이 상당히 비싼 기능 일 수 있으므로이를 사용하여 성능을 향상시킬 수 있습니다.
하나의 큰 경고, NullReferences 또는 이와 유사한 문제가 있습니다. 예를 들면 다음과 같습니다.
if(class != null && class.someVar < 20)
class가 null 인 경우 if 문 class != null
은 false입니다. & 만 사용하면 확인하려고 시도 class.someVar
하고 멋지게 얻습니다 NullReferenceException
. Or-Operator를 사용하면 나쁜 일이 발생할 가능성이 적지 만 염두에 두어야 할 부분이 많지 않을 수 있습니다.
아무도 단일 사용하지 않습니다 &
또는 |
각 조건을 실행하는 함수 인 디자인을 가지고하지 않는 한,하지만 연산자. 디자인 냄새처럼 들리지만 때로는 (드물게) 일을하는 깨끗한 방법입니다. &
운영자는 "이 3 개 기능을 실행하고, 그 중 하나가 false를 반환하는 경우 다른 블록을 실행"를가하면서, 않습니다 |
"없음 반환 거짓이있는 경우에만 다른 블록을 실행"않습니다 - 유용하지만 말했듯이, 자주는 디자인이다 냄새.
그러나 두 번째로 |
and &
연산자를 사용합니다 : Bitwise Operations .
&
과 |
조건 연산자로하는 해킹, 그리고 그들도 C / C ++를 사용할 필요가있는 경우 문제를 얻을 것이다 : 1 && 2
진정한 동안은 1 & 2
false입니다.
&
보다 의미 다른를 전달하기 위해 무엇을 거의 항상 수단 : 비트 단위 등) .
|| 논리 OR 연산자입니다. 기본적으로 그것이 무엇인지 아는 것 같습니다. if, while 등과 같은 조건문에 사용됩니다.
condition1 || condition2
condition1 또는 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
잘만되면 그것은 의미가 있습니다.
마지막 두 가지 질문에 답하기 위해 "두 연산자의 차이점을 아는 것"외에는 경고가 없습니다. 그들은 완전히 다른 두 가지 일을하기 때문에 서로 교환 할 수 없습니다.
좋은 질문. 이 두 연산자는 PHP와 C #에서 동일하게 작동합니다.
|
비트 OR입니다. 비트별로 두 값을 비교합니다. 예 : 1101 | 0010 = 1111. 비트 옵션을 사용할 때 매우 유용합니다. 예를 들어 Read = 01 (0X01) Write = 10 (0X02) Read-Write = 11 (0X03)입니다. 유용한 예가 파일을 여는 것입니다. 간단한 예는 다음과 같습니다.
File.Open(FileAccess.Read | FileAccess.Write); //Gives read/write access to the file
||
논리 OR입니다. 이것은 대부분의 사람들이 OR을 생각하는 방식이며 그들의 진실에 따라 두 가지 가치를 비교합니다. 예를 들어 나는 가게에 가거나 쇼핑몰에 갈 것입니다. 이것은 코드에서 가장 자주 사용되는 것입니다. 예를 들면 다음과 같습니다.
if(Name == "Admin" || Name == "Developer") { //allow access } //checks if name equals Admin OR Name equals Developer
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
|
는 논리적이거나 부울에 적용될 때 입니다. 연결된 참조 상태입니다. 그것은 비트 연산자 것처럼 비트 값 때문에 실제로, 최종 결과는 동일 true
하고 false
는 비트 또는 값으로 논리적으로 동일한 결과를 생성하거나 않도록한다. 즉 (int)(bool1 | bool2)
== ((int)bool1) | ((int)bool2)
입니다.
자바의 간단한 예
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
&-(조건 1 및 조건 2) : 첫 번째가 거짓 인 경우에도 두 경우를 모두 확인합니다.
&&-(조건 1 및 조건 2) : 사례 1이 거짓 인 경우 두 번째 사례를 확인하지 않아도됩니다.
&&-연산자는 코드를보다 빠르고 전문적으로 실행하며 거의 사용하지 않습니다.
| -(조건 1 | 조건 2) : 사례 1이 참인 경우에도 두 경우를 모두 확인합니다.
|| -(조건 1 || 조건 2) : 첫 번째 사례가 참인 경우 두 번째 사례를 확인하지 않아도됩니다.
|| -운영자가 전문적으로 코드를 더 빠르게 실행합니다 | 거의 사용되지 않습니다
rarely used
? 모두 당신이 원하거나해야 할 일에 달려 있습니다.
수학적 정의에 따르면 OR과 AND는 이항 연산자입니다. 그들은 다음과 유사하게 LHS 및 RHS 조건을 검증합니다. | 그리고 &.
|| L & S 조건이 충족되지 않으면 OR 및 AND 연산자의 특성을 중지하여 && 변경하십시오.
| 연산자는 두 개의 피연산자에 대해 비트 단위 OR을 수행합니다 (즉, 양쪽이 false를 반환하려면 false로 평가되어야 함을 의미 함). 필요한 경우 두 번째 연산자 만 평가합니다.
http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx
단일 파이프 "|" "비트 단위"이거나 수행중인 작업을 알고있는 경우에만 사용해야합니다. 이중 파이프 "||" 논리 또는 "x == 0 || x == 1"과 같은 논리 문에서 사용할 수 있습니다.
다음은 비트 단위 또는 수행 단위의 예입니다. a = 0101 및 b = 0011이면 a | b = 0111입니다. 0이 아닌 값을 true로 처리하는 논리 시스템을 다루는 경우 비트 단위 또는 논리 또는 논리와 같은 방식으로 작동하지만 비트 단위 및 "&"는 해당되지 않습니다. 또한 비트 단위 또는 단락 평가를 수행하지 않습니다.
bool
단락없이 유형 에 사용할 수도 있습니다 .