uint16_t로 인코딩 된 플래그 세트가 있다고 가정 해보십시오 flags
. 예를 들면 다음과 같습니다 AMAZING_FLAG = 0x02
. 이제 기능이 있습니다. 이 기능을 사용하려면 플래그를 변경해야하는지 확인해야합니다. 변경하려면 플래시에 기록해야하기 때문입니다. 그리고 그것은 비싸다. 따라서 나는 flags & AMAZING_FLAG
같은지 알려주는 검사를 원합니다.doSet
. 이것이 첫 번째 아이디어입니다.
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
이것은 직관적 인 if 문이 아닙니다. 더 좋은 방법이 있어야한다고 생각합니다.
if ((flags & AMAZING_FLAG) != doSet){
}
그러나 이것은, 실제로 일을하지 않는 true
동일하게 보인다 0x01
.
그렇다면 부울과 비트를 비교할 수있는 깔끔한 방법이 있습니까?
(flags & AMAZING_FLAG) && doSet
입니까?