이 =! 교환원은 무엇입니까?
이 코드에 놀랐습니다.
if (a =! b) { // let it be on false
...
}
★★★★★★★★★★★★★★★★★.a값은 할당되지 않습니다.이환환 슨슨 ??? ???
의 연산자, 두 that, that that that that that that that that that that that that that that= ★★★★★★★★★★★★★★★★★」!한 명도 없어요.일 수도 요.
a = !b;
if (a) {
// whatever
}
a인 b그참인지 를 테스트합니다하게, 「진짜」인지 아닌지를 테스트합니다b거짓입니다).
잘못 한 것일 도 있어요.a != b.
공룡이 상에서 때, C5판 UNIX의 PDP-11이 실행되었습니다.=!'같지 않음' 연산자였습니다.이 사용법은 표준 C의 작성에 의해 폐지되었기 때문에, 「논리 역의 할당」을 의미합니다.a = !b컴파일러가 생각하는 코드를 읽는 사람에게 알기 쉽게 하기 위해서, 이것은 바이너리 연산자를 항상 공백으로 둘러싸는 좋은 논거입니다.
아무도 이것에 대해 언급하지 않은 것은 조금 놀랐습니다만, 다시 말씀드리지만, 그렇게 오래된 C 컴파일러를 만져본 SO 사용자는 저밖에 없을지도 모릅니다.
a되어 있습니다.b그 it . 형식이 뿐입니다.
if( a = !b ) {
그리고 어떤 상황 속에 숨겨진 사악한 임무가 있지
a =! b
그냥 웃긴 표현일 뿐이야
a = !b
,, 의의 not b로로 합니다.a.
값은 " " " 입니다.a과제의 종료후.
이 " " " 라는 것을 알 수.a = !b!false (예:)true을 알 수 .a도 「」입니다)true.
#include <iostream>
int main()
{
bool a = false;
bool b = false;
if(a)
printf("a is true!\n");
else
printf("a is false!\n");
if(a = !b)
printf("expression is true!\n");
else
printf("expression is false!\n");
if(a)
printf("a is true!\n");
else
printf("a is false!\n");
}
결과:
a is false!
expression is true!
a is true!
C/C++ 연산자는 .=! 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 가 있습니다.!=(비교 연산자/관계 연산자와 동일하지 않음)
두 가지 가능성이 있습니다.
- 오타일 수도 있어요.
=!는 ""에 .if가 '타자'를 하려고 합니다.!==!!=true 또는 false를 반환하는 비교 연산자입니다. - 가 부울 가능성이 .
b로로 합니다.a오타를 해서 등호 뒤에 띄어쓰기를 안 했어요.어쨌든 컴파일러는 이렇게 해석합니다.c++의 연산자 우선순위에 따라 다음 작업을 수행합니다.- 연산자 논리적 NOT()
!우선 순위는 3이고 연결 순위는 오른쪽에서 왼쪽으로입니다. - Operator Direct Assignment(=) 우선 순위는 16이고 Associativity는 오른쪽에서 왼쪽으로입니다.
- 연산자 논리적 NOT()
연산자는 두 연산자입니다.=와 (주석) 연산자!교환입니다.이는 기본적으로 의 할당으로 해석될 수 있습니다.ab.
if (a = !b)
아마 그 은 '아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.!=★★★★★★★★★★★★★★★★★★:
if (a != b)
이것은 단일 연산자가 아니라 코드를 난독화하는 훌륭한 방법입니다.
라고 써있으면a=!b대신 공백이 있으면 단일 연산자임을 믿지 못할 수 있습니다.
컴파일러에는 문장 전체를 괄호 세트로 감싸지 않는 한 조건식으로 할당에 대한 경고가 있습니다.이 경고는 이 경고가 도움이 되는 경우를 나타내는 완벽한 예입니다.
이 두 문장은 기능적으로는 동일하지만 하나는 경고를 생성하고 다른 하나는 그렇지 않습니다.
if (a =! b) // Generates a warning with `-Wparentheses` (gcc)
if ((a =! b)) // No such warning
- 와펜시
true 값이 예상되는 컨텍스트에 할당이 있거나 연산자가 중첩되어 있는 경우 등 특정 컨텍스트에서 괄호가 생략된 경우 경고합니다.
물론 이는 사용자가 책임 있는 프로그래머이며 컴파일러가 내보내는 경고를 실제로 읽는 것을 전제로 합니다.
보다 합리적인 방법으로 공백을 사용하면 다음과 같은 문장이 나타납니다.
if (a = !b) // Assign A the value of (logical) NOT B and then test the truth
이한 사람이 때이 됩니다.! ★★★★★★★★★★★★★★★★★」=에서 cryptic inline comments는 과 같습니다a = !b아마도 작가의 의도일 것이다.
에는 C++가 .=!operator. 즉, 이 「」, 「」, 「」, 「」, 「」, 즉 「」라고 것을 합니다.= 뒤에 연산자! '아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.a = !b if★★★★★★ 。
이것은 모두 코드의 명확성에 관한 것입니다.
요.if (a = !b)
if (a = !b)' 안 된다'고 과 똑같아요.a is is is is is 。!b 엄밀히 말하면 되고 있습니다.즉, 2개의 연산자가 되고 있습니다.=이고, 작업입니다.!논리적인 표현입니다.
사이를 띄워주세요.= ★★★★★★★★★★★★★★★★★」!이 혼란을 해결해주죠
여기에는 다음 3가지 이유가 있습니다.
요.
!=연산자, 즉 동일하지 않습니다.예:if (a != b) { // a is not equal to b }요.
a == !b즉, , 를 의미합니다.a않은 것과b가장 일반적으로 불란과 함께 사용됩니다.예:if (a == !b) { // The boolean a is equal to not b (a is not equal to b) }'배정'을 하려고 요.
a의 역순으로b. 예:bool a = !b; // Sets a to the opposite of b
제 생각에 이건 글쓰기나 인쇄 실수 중 하나인 것 같아요.왜냐하면 이 코드가 컴파일 타임에러를 가지고 있기 때문에 컴파일 할 수 없기 때문입니다.그리고 이것은 if 구 안에 있습니다.반환 타입은 부울이어야 합니다.그럼 어떻게 가능하죠?답은 단순히 실수이거나 마이크가 말한 것처럼 난해한 글쓰기 방식이다.
그리고 a로 컴파일되는 변수 a와 b가 모두 부울인 경우에만 가능합니다(a = !b).
을 '하다'라고 .a is is is is is 。!b.
저는 당신의 질문에 답하려고 노력하고 있고, Mike의 답변에 동의하여, 저는 단지 합산하는 것입니다.
'하다'라는 글로도 할 수 .a=!!b.
★★a=!b0로로 합니다.a ★★★★★★★★★★★★★★★★★」a=!!b1로로 합니다.a.
=!단일 연산자가 아니라 이 두 연산자의 조합입니다.이러한 유형의 문제는 학생들이 코딩 기술을 확인하도록 잘못 안내하기 위해 출제됩니다.
언급URL : https://stackoverflow.com/questions/21029174/whats-this-operator
'source' 카테고리의 다른 글
| 설계 패턴:팩토리 vs 팩토리 방법 vs 추상 팩토리 (0) | 2022.09.01 |
|---|---|
| Vue 플러그인을 NPM에 게시하는 방법 (0) | 2022.09.01 |
| Gradle 인수에 대한 메서드 컴파일()을 찾을 수 없습니다. (0) | 2022.08.31 |
| GCC에서 생성된 asm은 어떻게 컴파일합니까? (0) | 2022.08.31 |
| vue cli - 수집되지 않은 구문 오류:예기치 않은 토큰 < (0) | 2022.08.31 |