반응형
!! c 연산자, 2개면 안되나요?
나는 이 코드를 읽고 이 줄을 가지고 있습니다.
switch (!!up + !!left) {
뭐가!!
연산자 ? 두개의 논리적이 아닌 ?
네, 두 개입니다.
!!a
가1
한다면a
0이 아닙니다.0
한다면a
가0
생각할 수 있습니다.!!
사실은, 에 대한 클램핑.{0,1}
. 저는 개인적으로 그 사용법이 화려해 보이는 것은 좋지 않은 시도라고 생각합니다.
이렇게 상상할 수 있습니다.
!(!(a))
차근차근 하면 이게 말이 돼요.
result = !42; //Result = 0
result = !(!42) //Result = 1 because !0 = 1
이것은 돌아올 것입니다.1
임의의 숫자(-42, 4.2f 등)를 사용하지만, 사용하는 경우만 해당됩니다.0
, 이렇게 될 것입니다.
result = !0; //Result = 1
result = !(!0) //result = 0
!!
는 보다 휴대성이 뛰어난 (C99 이전) 의 대안입니다.(_Bool)
.
맞아요.두 개입니다.어떤 사람이 이런 일을 하는 이유를 알아보려면 다음 코드를 사용해 보십시오.
#include <stdio.h>
int foo(const int a)
{
return !!a;
}
int main()
{
const int b = foo(7);
printf(
"The boolean value is %d, "
"where 1 means true and 0 means false.\n",
b
);
return 0;
}
출력합니다.The boolean value is 1, where 1 means true and 0 means false.
만약 당신이 떨어뜨리면.!!
, 하지만, 그것은 출력합니다.The boolean value is 7, where 1 means true and 0 means false.
언급URL : https://stackoverflow.com/questions/10307281/c-operator-is-a-two-not
반응형
'source' 카테고리의 다른 글
.aspx 페이지에서 web.config 설정에 직접 액세스하는 방법은 무엇입니까? (0) | 2023.10.04 |
---|---|
Eclipse CDT "Symbol NULL을 확인할 수 없습니다." (0) | 2023.09.24 |
jQuery 검증:정규식 유효성 검사를 위한 규칙을 추가하는 방법은 무엇입니까? (0) | 2023.09.24 |
archive.php 대신 index.php를 사용한 워드프레스 (0) | 2023.09.24 |
안드로이드:View.setID(intid)를 프로그래밍 방식으로 - ID 충돌을 방지하는 방법은? (0) | 2023.09.24 |