문제

나는 항상 사용했습니다 || (파이프 2개) C# 및 PHP 모두에서 OR 표현식.가끔 단일 파이프가 사용되는 것을 볼 수 있습니다. |.이 두 가지 사용법의 차이점은 무엇입니까?서로 겹쳐서 사용할 때 주의 사항이 있나요? 아니면 서로 바꿔 사용할 수 있나요?

도움이 되었습니까?

해결책

마찬가지로 & 그리고 && 연산자인 이중 연산자는 "단락" 연산자입니다.

예를 들어:

if(condition1 || condition2 || condition3)

조건 1이 true인 경우 조건 2와 3은 확인되지 않습니다.

if(condition1 | condition2 | condition3)

이는 1이 이미 true인 경우에도 조건 2와 3을 확인합니다.귀하의 조건은 상당히 비싼 함수일 수 있으므로 이를 사용하면 좋은 성능 향상을 얻을 수 있습니다.

NullReferences 또는 유사한 문제라는 하나의 큰 경고가 있습니다.예를 들어:

if(class != null && class.someVar < 20)

클래스가 null이면 if 문은 다음 이후에 중지됩니다. class != null 거짓입니다.&만 사용하면 확인을 시도합니다. class.someVar 그리고 당신은 좋은 것을 얻습니다 NullReferenceException.Or-Operator를 사용하면 나쁜 일이 발생할 가능성이 거의 없으므로 함정이 아닐 수도 있지만 명심해야 할 사항입니다.

아무도 싱글을 사용하지 않습니다. & 또는 | 그러나 각 조건이 실행되어야 하는 기능인 설계가 없는 한 연산자입니다.디자인 냄새처럼 들리지만 때로는 (드물게) 작업을 수행하는 깔끔한 방법입니다.그만큼 & 연산자는 "이 세 가지 함수를 실행하고 그 중 하나가 false를 반환하면 else 블록을 실행"합니다. | "false를 반환하지 않는 경우에만 else 블록을 실행합니다"는 유용할 수 있지만 말했듯이 종종 디자인 냄새입니다.

두 번째 용도가 있습니다. | 그리고 & 하지만 연산자: 비트별 연산.

다른 팁

|| 논리 또는 연산자입니다.기본적으로 그것이 무엇인지 아는 것 같습니다.if, while 등의 조건문에 사용됩니다.

condition1 || condition2

조건1 또는 조건2가 참인 경우 참으로 평가됩니다.

| 비트 또는 연산자입니다.두 개의 숫자를 연산하는 데 사용됩니다.각 숫자의 각 비트를 개별적으로 살펴보고, 숫자 중 적어도 하나에서 비트 중 하나가 1이면 결과 비트도 1이 됩니다.다음은 몇 가지 예입니다.

A = 01010101
B = 10101010
A | B = 11111111

A = 00000001
B = 00010000
A | B = 00010001

A = 10001011
B = 00101100

A | B = 10101111

그게 말이 되기를 바랍니다.

마지막 두 질문에 대답하기 위해 "두 운영자의 차이점을 아는 것 외에는 경고가 없다고 말하지 않을 것입니다. 그들은 완전히 다른 두 가지를 수행하기 때문에 서로 바꿀 수 없습니다.

하나는 "비트별 or"입니다.

10011b | 01000b => 11011b

다른 하나는 논리 또는입니다.

참 또는 거짓 => 참

좋은 질문.이 두 연산자는 PHP와 C#에서 동일하게 작동합니다.

| 약간 또는.두 값을 비트별로 비교합니다.예:1101 | 0010 = 1111.이는 비트 옵션을 사용할 때 매우 유용합니다.예:읽기 = 01(0X01) 쓰기 = 10(0X02) 읽기-쓰기 = 11(0X03).한 가지 유용한 예는 파일을 여는 것입니다.간단한 예는 다음과 같습니다:

File.Open(FileAccess.Read | FileAccess.Write);  //Gives read/write access to the file

|| 논리적이거나.이는 대부분의 사람들이 OR을 생각하는 방식이며 진실을 기반으로 두 값을 비교합니다.예:나는 가게에 갈 거예요, 아니면 쇼핑몰에 갈 거예요.이것은 코드에서 가장 자주 사용되는 것입니다.예:

if(Name == "Admin" || Name == "Developer) { //allow access } //checks if name equals Admin OR Name equals Developer

PHP 리소스: http://us3.php.net/언어.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

자바의 간단한 예

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):Dosen은 사건이 거짓 인 경우 두 번째 케이스를 확인하는 것을 귀찮게하지 않습니다.

&& - 연산자는 코드를 더 빠르게, 전문적으로 실행하게 하며 거의 사용되지 않습니다.

| - (조건 1 | 조건 2) :사례 1이 참이더라도 두 사례를 모두 확인합니다.

|| - (조건 1 || 조건 2) :첫 번째 사건이 사실이라면 두 번째 케이스를 확인하는 것을 귀찮게하지 마십시오.

|| - 운영자는 코드를 더 빨리 실행하게합니다. 거의 사용되지 않습니다

단일 파이프 |는 다음 중 하나입니다. 비트별 연산자.

위키피디아에서:

C 프로그래밍 언어 패밀리에서 비트 또는 운영자는 "|"입니다. (파이프).다시 말하지만,이 연산자는 부울 "논리적 또는"상대방과 혼동되어서는 안됩니다. 이는 오페라를 부울 값으로 취급하고 "||"로 작성됩니다. (두 파이프).

수학적 정의에 따르면 OR 및 AND는 이진 연산자입니다.그들은 유사하게 LHS 및 RHS 조건을 확인합니다. 그리고 &.

|| && LHS 조건이 충족되지 않을 때 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

노래 파이프 "|" "Bitwise"이거나 무엇을하고 있는지 알 때만 사용해야합니다.이중 파이프 "||" 논리적이거나 "x == 0 || x == 1"과 같은 논리적 진술에 사용할 수 있습니다.

다음은 비트 or의 기능에 대한 예입니다.a=0101이고 b=0011이면 a|b=0111입니다.0이 아닌 모든 것을 true로 처리하는 논리 시스템을 다루는 경우 비트 or는 논리 or와 동일한 방식으로 작동하지만 대응 부분(비트 및 "&")은 그렇지 않습니다.또한 비트별 or는 단락 평가를 수행하지 않습니다.

단일 파이프(|)는 비트 OR 연산자.

두 개의 파이프(||)는 논리적 OR 연산자입니다.

그것들은 서로 바꿔 사용할 수 없습니다.

|| (두 파이프)는 일반적으로 a 논리적 또는 동안 | (하나의 파이프)는 a입니다 바이너리 또는.내 머리 위에서는 그 차이가 큰 문제가 될 것이라고 생각할 수 없습니다(결과를 다른 것에 할당할 때를 제외하고).그러나 나는 다른 누군가가 그것이 중요한 상황에 처할 것이라고 확신합니다.

편집하다:와, 이 글을 쓰는 동안 6개의 다른 답변이 나왔습니다.

비트 단위(|) 대논리적(||)!논리를 Java의 비교 가능한 객체로 생각하십시오. 비트 연산자가 이러한 객체를 보는 동안 구별 가능한 일부 "부분"을 비교하고 시각적으로 쌍둥이인지 확인하는 대신(논리와 마찬가지로) DNA 샘플을 수행하고 0과 1을 확인합니다. 대신에.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top