"set"/ "clear"가 마음에 들지만 문구가 애매 모호하다는 점에주의하십시오. 으로 필립 지적 , 변수에 어떤 값을 쓰는 의미로 취할 수있다 "는 부울 변수가 설정". 그러나 "플래그 설정"이 더 명확합니다.
관련 용어 : 0 / 0이 아닌 정수를 0 / 1 값으로 바꾸는 것을 "부울"이라고 합니다.
실제로 0 / 1 값을 true / false 대신 정수 bool
로 사용하는 경우 해당 단어를 사용할 수 있습니다. 그렇지 않으면 컴파일러가 수행 해야하는 작업 비용에 대해 이야기하는 경우에만 나타납니다. (또는 SIMD 비교를 사용하여 수동으로 벡터화하는 경우 각 벡터 요소에서 모두 0/1 비트를 생성합니다).
C 및 C ++에서는 bool
암시 적으로 0 또는 1의 정수로 다시 변환 될 수 있으며, 일반적인 구현 bool
에서는 0이 아닌 1이 아닌 1 또는 1의 1 바이트 값으로 저장됩니다. 효율적 a && b
이기는하지만 실제로는 많은 C 컴파일러가 최적화를 놓쳤다 .
bool booleanize(int a) { return a; } // C++
이 함수 ret
는 대부분의 아키텍처 에서 여러 명령어 (를 포함하지 않음)로 컴파일합니다 . (MIPS는 별개의 플래그 / 조건 코드 레지스터 대신 레지스터 비교 명령을 갖는 흥미로운 예외입니다). x86-64, MIPS 및 ARM thumb 용 Godbolt 컴파일러 탐색기 에서 x86-64 버전은 다음과 같습니다.
test edi, edi # set flags according to a & a
setne al
ret # return value in AL, the low byte of RAX
부울이 무엇인지에 대한이 예제는 약간 큰 주제입니다.