문제

두 가지 변수를 평가하는 경우 두 가지 메소드 호출이 아닌 경우 "&&"또는 "&"를 사용하는 날씨가 중요합니다.

//some logic that sets bool values

boolean X = true;
boolean Y = true;

if (X & Y){
   // perform some operation
}

if (X && Y){
   // perform some operation
}

또한 C# 3.0 / .NET 3.5에 사용하는 책은 && 운영자 만 참조합니다. & 운영자가 사라지는가?

도움이 되었습니까?

해결책

관찰 된 바와 같이 & 비트와 연산자입니다. 원시 바이너리 수학은 시간이 지남에 따라 점점 더 흔한 것처럼 보이며, 점점 더 많은 개발자가 실제로 비트 산술을 이해하지 못합니다. 때때로 고통이 될 수 있습니다.

그러나 특히 데이터를 플래그로 보는 모든 것을 가장 잘 해결하는 작업이 많이 있습니다. 그만큼 & 운영자는 100% 필요하며 아무데도 가지 않습니다. 부울 단락만큼 자주 사용되지 않습니다. && 운영자.

예를 들어:

[Flags]
enum SomeEnum { // formatted for space...
    None = 0, Foo = 1, Bar = 2 // 4, 8, 16, 32, ...
}
static void Main() {
    SomeEnum value = GetFlags();
    bool hasFoo = (value & SomeEnum.Foo) != 0;
}
static SomeEnum GetFlags() { ... }

다른 팁

true/false 로직 테스트를 수행하는 경우 항상 &&를 사용하십시오. 싱글 & 약간짜리 '및'를 수행합니다. 경우에 따라 논리 테스트처럼 작동하지만 모든 논리 사례에 대해 작동하는 것은 아닙니다. 단일의 가장 일반적인 사용은 비트 마스크를 적용 할 때입니다.

예 (&&) :

true && true == true

예시 (&):

00101001 & 00100001 = 00100001

표현식의 두 번째 부분을 사용하는 경우, 표현식의 두 번째 부분이 평가됩니다. 두 번째 부분이 첫 번째 부분이 사실이라는 경우에는 나빠질 수 있습니다. 일반적으로 두 번째 부분은 첫 번째 부분이 False 인 경우 평가되지 않습니다.

논리적으로 다른 사람들이 말한 것처럼 단일 및 약간의 작업을 수행하는데, 이는 여전히 부울 비교/평가에 유효합니다. 실제로 단일 (또는 |)을 사용해야하는 유일한 시간 (또는 부울 평가)은 두 번째 평가가 항상 실행되어야하는 경우 (함수 호출/수정자인 경우)입니다. 이것은 나쁜 관행이며 아마도 책이 언급하지 않은 이유 일 것입니다.

단일 및 깃발 열거 및 비트 마스크에 유용합니다.

다음은 OBJ를 제외하고는 NULL입니다.

bool b = obj != null & obj.IsActive

그러나 이것은 작동합니다 :

bool b = obj != null && obj.IsActive

이것은 나쁘다 :

bool b = obj.IsActive && obj.SetActive(false);
bool b = obj.IsActive & obj.SetActive(false);

& 운영자는 여기에 있습니다.

&&는 비트 연산자입니다. &&는 및 연산자입니다. 완전히 다른 두 가지 작업.

int a = 1;
int b = 2;
assert (a & b == 0) 
assert (a && b == true) 

편집 : OOOPS ...이 예제는 C#에서 작동하지 않습니다. C ++로되어야합니다. 바라건대 그것은 두 연산자의 의도와 차이를 보여줍니다.

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