&& 및 || 논리적 인 것이 아니라 조건부 연산자입니까?


62

그 내용의 MSDN C #을 문서로 혼란 비트입니다 &|논리 연산자이며, 그 &&와는 ||조건 연산자입니다.

나는 계속 전화 &&, ||!논리 연산자, 그래서 내가 잘못입니까?


4
비논리적 인 것처럼 보이지만 두 클래스 사이에는 중요한 차이점 |이 있으며 ||, 많은 경우 프로그램 동작에 명백한 변화없이 상호 교환 할 수 있지만, 상호 교환 가능 하다고 가정하지 않는 것이 중요합니다 .
다니엘 R cks

답변:


120

그 내용의 MSDN C #을 문서로 혼란 비트입니다 &|논리 연산자이며, 그 &&와는 ||조건 연산자입니다. 나는 계속 전화 &&, ||!논리 연산자, 그래서 내가 잘못입니까?

아니; 당신은 맞습니다.

MSDN 설명서에는 작고 중요하지 않은 명명법 오류가 많이 있습니다. 나는 가능한 한 많은 것들을 꺼내려고 노력했지만, 그것이 잘못되고 오도되지 않는 경우에는 항상 시간을 현명하게 사용하는 것은 아닙니다. C # 기능의 이름에 대한 명확한 설명을 원하면 사양으로 이동하십시오.

따라서 관련 권한은 C # 사양이며 섹션 7.11에 나와 있습니다.

&, ^|연산자는 논리 연산자라고합니다.

그런 다음 내장 논리 연산자를 정수, 열거, 부울 및 널 입력 가능 부울 논리 연산자로 세분화합니다. 사용자 정의 논리 연산자도 있습니다. 자세한 내용은 사양을 참조하십시오.

섹션 7.12에서

&&||연산자는 조건부 논리 연산자라고합니다. 또한 "단락"논리 연산자라고도합니다.

따라서 모두 논리 연산자입니다. 그들 중 일부는 조건부 논리 연산자 입니다.

조건부 논리 연산자를 조건부로 만드는 것은 무엇입니까 ? 하나는 일반적으로 사용되는 때문입니다있는 그럴듯한 추측을 할 수 조건문 ( if) 또는 조건식 ( ? :). 실제 이유는 사양에 의해 제공됩니다.

&&||연산자는 조건의 버전입니다 &|운영자 : 작업이 x && y작업에 해당하는 x & y것을 제외하고, y경우에만 평가 x거짓이 아니다. 작업 이 true가 아닌 경우에만 평가되는 것을 제외하고 작업에 x || y해당 합니다.x | yyx

따라서 오른쪽 피연산자가 왼쪽 피연산자의 값에 따라 조건부로 평가 되므로 조건부 논리 연산자의 이름이 지정 됩니다.

조건부 논리 연산자조건부 표현식에 대한 "구문 설탕" 이라는 점을 주목하면보다 생생하게 볼 수 있습니다 . x && y간단하게 작성하는 쾌적한 방법 x ? y : false, 그리고 x || y간단하게 작성하는 쾌적한 방법입니다 x ? true : y. 조건부 논리 표현식은 실제로 조건부 표현식입니다.

조건부 논리 연산자에는 사용자 정의 형식도 있으며 약간 까다 롭습니다. 자세한 내용은 사양을 참조하십시오.

이 주제에 관심이 있다면 더 읽어보십시오.


3
@RobertHarvey : &는 bools, integer type 또는 enum type에서 작동 할 수 있지만 && bool에서만 작동한다는 사실은 그 중 하나를 연산자의 "조건부"형식으로 명명하는 것과는 관련이 없습니다. 조건부 연산자는 평가 의미론에 조건부 분기가 있으므로 조건부 연산자입니다.
Eric Lippert

16
나는 "단락 연산자"라는 용어가 설명 된 의미에서 "조건 연산자"보다 훨씬 더 대중적이며 아마도 덜 모호하다는 인상을 받고 있습니다.
Doc Brown

15
@DocBrown : 그것은 확실히 인기가 있지만, 나는 항상 그 이름이 오도하는 것을 발견했습니다. 결과를 얻는 데있어 "단락"과 "단축"이 같은 것이라고 생각한 누군가에 의해 만들어진 것 같습니다. 단락은 전기 시스템을 빠르게 파괴 할 수있는 위험한 결함입니다. 잘못 사용하면 위험 하기 때문에 C #에서 "안전하지 않은"블록의 이름을 "안전하지 않은" 것으로 지정했습니다 . 귀엽고 가치있는 이름을 가진 것들을 줍시다. Elvis 운영자를 시작하지 마십시오. :-)
Eric Lippert

26
@EricLippert : "단락"은 일반 대중에게 무섭게 들릴지 모르지만 K & R이 실제 정의에 대해 혼동하지 않았다고 생각합니다. 전기 공학에서 회로 단락은 항상 위험한 결함은 아닙니다. 실제로 우리는 고의적으로 항상 그렇게합니다. 그것은 전기에 따라야 할 짧은 경로를 제공함으로써 회로의 불필요한 부분을 차단하는 것을 의미합니다.
hackerb9

1
@CortAmmon : 사용자 정의 연산자 의미가 약간 다르며 세부 사항은 사양을 참조해야한다고 말하는 다음 단락을 읽으려고합니다.
Eric Lippert

27

C #에서 이들은 모두 논리 연산자입니다.

int x = 0xABCD & 0xFF // x == 0xCD

&&그리고 ||"이라고 조건 들이 있기 때문에 논리 연산자" 단락.

bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated, 
                                     // because x == 0xEF is false

이 용어는 언어마다 다릅니다. C 및 C ++에서 &&||단지이다 논리 연산자. 자바에서 &|라고 비트 연산자 C 및 C ++가로 분류하면서, 산술 연산자 .


3
그렇습니다. Microsoft는 권한이지만 권위있는 문서는 사양입니다. 섹션 7.12, 조건부 논리 연산자를 참조하십시오 .
Eric Lippert

8
이야기의 도덕은 다음과 같습니다 . 이름에 대해 정확한 것보다이 연산자의 역할을 정확하게 이해하는 것이 더 중요합니다.
Robert Harvey

21
운영자가하는 일에 집중하고 어휘에 집착하지 마십시오. 명명 된 유해한 이름 지정을 참조하십시오 .
Robert Harvey

4
+1. 질문에 나열된 모든 것은 하나 또는 두 개의 표현식을 취하고 값으로 평가되는 연산자 입니다. 형용사는 불필요한 머리카락 분리입니다.
Blrfl


-2

점은이다 &하고 |있습니다 비트 단위 가와 수율 비트 문자열 값 적용되는 의미 연산자. 그리고 비트 단위는 프로그래머들에게 매우 사용되는 용어입니다.

예를 들어 0xff & 0x00 == 0x00, while 0xff | 0x00 == 0xff.

그리고 &&및이 ||조건에 적용 및 조건의 일반적인 값을 얻을 수있다; 즉, truefalse.

예를 들어 true && false == false, while true || false == true.

따라서 &&||호출 할 수있는 조건 즉 프로그래머들 사이에서 일반적인 용어가 아니더라도, 연산자.

물론 모든 C, C ++, Java 및 C # 프로그래머는이 모든 것을 알고 있습니다. 그러나 "조건부 연산자"가 우리 프로그래머가 자주 사용하는 용어가 아니기 때문에 오해가 발생한 것 같습니다.


5
물론 모든 C, C ++, Java 및 C # 프로그래머는이 모든 것을 알고 있습니다. OP가 바보라는 것을 암시하는 것은 매우 무례한 일입니다. 프로그래머 를 작성 하여 OP를 제외하면됩니다. 그렇게하지 마십시오.
DarkDust

1
Eric Lippert의 답을 얻은 후에 나중의 대답이 부가 가치를 가져다 준다고 생각하지 않으며 더 나아가 질문의 요점을 이해하지 못한다는 의미에서 잘못되었습니다.
혼자 지덱

@DarkDust 모든 C, C ++, Java 및 C # 프로그래머는 이러한 연산자를 이해해야합니다. 이것은 무례한 것이 아니라 사실 입니다.
Phil1970

1
@ Phil1970 : OP는 이러한 연산자를 이해하는 것 같습니다 . 이름을 명확하게하는 것입니다 . 이러한 관점에서 힐튼의 답변에서 관련 용어를 강조하면서 그의 문장은 모든 프로그래머가 이러한 이름 지정 세부 사항에 대해 알고 있음을 의미하는 것으로 해석 될 수 있지만 그렇지 않습니다 . 이것은 (다른 답변의 토론에서 볼 수 있듯이 ) 잘못되었으며 그 문구는 무례합니다.
DarkDust

4
친애하는, 내 대답이 무례하게 보이면 미안합니다. 영어는 모국어가 아닙니다. 어쨌든 나는 OP가 프로그래머가 아니라는 것을 암시하려고하지 않았습니다. Au contraire, 나는 그 또는 그녀가 읽은 텍스트에서 이상한 이름으로 혼동되었다는 것을 의미했습니다. 내가하려고했던 모든 것은 프로그램 조각으로 비정상적인 명명을 명확하게하는 것입니다.
힐튼 페르난데스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.