~(비트 NOT)과 ^(비트 XOR)는 비트 마스킹에서 매우 중요한 연산자
S = ~S;
int S = 0b00001111; // 15 (0x0F)
S = ~S;
S = 0b11110000 // -16 (2의 보수 표현)
🚨 C++에서는 ~S를 수행하면 음수 값(2의 보수 형태)이 나올 수 있으므로 주의!
예를 들어 ~0b00001111 = 0b11110000이 되는데, 이는 signed int로 해석하면 -16
S = S ^ (1 << idx);
int S = 0b00001111; // 15 (0x0F)
S = S ^ 0b00000101; // XOR 연산 수행
S = 0b00001010 // 10 (0x0A)
🚀 즉, XOR 연산을 사용하면 특정 비트를 반전(Toggle)할 수 있음!
연산자 연산 방식 특징
~S | 비트를 모두 반전 (1 ↔ 0, 0 ↔ 1) | 단항 연산자(숫자 1개만 사용) |
S ^ X | X와 비교하여 같은 비트는 0, 다른 비트는 1 | 이항 연산자(숫자 2개 필요), 특정 비트 토글 가능 |
int S = 0b11001010; // 202 (0xCA)
S = ~S;
S = 0b00110101 // -203 (signed int일 경우)
➡ 모든 비트를 반전하지만, C++에서는 2의 보수 표현으로 인해 음수 값이 나올 수 있음! 🚨
int S = 0b00001111; // 15 (0x0F)
S ^= (1 << 2); // 3번째(2번째 인덱스) 비트를 토글
S = 0b00001011 // 11 (0x0B)
🚀 이제 2번째 비트(0b0100)가 반전됨!
➡ 즉, ^ 연산자는 특정 비트를 조작하는 데 사용됨.
사용 목적 적절한 연산
전체 비트 반전 (1 ↔ 0, 0 ↔ 1) | ~S 사용 |
특정 비트 반전 (Toggle) | S ^= (1 << idx) 사용 |
특정 비트를 1로 설정 (켜기) | `S |
특정 비트를 0으로 설정 (끄기) | S &= ~(1 << idx) 사용 |
🚀 즉, ~는 전체 비트를 반전하는 데 사용하고, ^는 특정 비트만 토글하는 데 사용하면 돼! 😊
~(비트 NOT)과 ^(비트 XOR)는 비트 마스킹에서 매우 중요한 연산자지만, 동작 방식이 완전히 다름
S = ~S;
int S = 0b00001111; // 15 (0x0F)
S = ~S;
S = 0b11110000 // -16 (2의 보수 표현)
🚨 C++에서는 ~S를 수행하면 음수 값(2의 보수 형태)이 나올 수 있으므로 주의!
예를 들어 ~0b00001111 = 0b11110000이 되는데, 이는 signed int로 해석하면 -16
S = S ^ (1 << idx);
int S = 0b00001111; // 15 (0x0F)
S = S ^ 0b00000101; // XOR 연산 수행
S = 0b00001010 // 10 (0x0A)
🚀 즉, XOR 연산을 사용하면 특정 비트를 반전(Toggle)할 수 있음!
연산자 연산 방식 특징
~S | 비트를 모두 반전 (1 ↔ 0, 0 ↔ 1) | 단항 연산자(숫자 1개만 사용) |
S ^ X | X와 비교하여 같은 비트는 0, 다른 비트는 1 | 이항 연산자(숫자 2개 필요), 특정 비트 토글 가능 |
int S = 0b11001010; // 202 (0xCA)
S = ~S;
S = 0b00110101 // -203 (signed int일 경우)
➡ 모든 비트를 반전하지만, C++에서는 2의 보수 표현으로 인해 음수 값이 나올 수 있음! 🚨
int S = 0b00001111; // 15 (0x0F)
S ^= (1 << 2); // 3번째(2번째 인덱스) 비트를 토글
S = 0b00001011 // 11 (0x0B)
🚀 이제 2번째 비트(0b0100)가 반전됨!
➡ 즉, ^ 연산자는 특정 비트를 조작하는 데 사용됨.
사용 목적 적절한 연산
전체 비트 반전 (1 ↔ 0, 0 ↔ 1) | ~S 사용 |
특정 비트 반전 (Toggle) | S ^= (1 << idx) 사용 |
특정 비트를 1로 설정 (켜기) | `S |
특정 비트를 0으로 설정 (끄기) | S &= ~(1 << idx) 사용 |
🚀 즉, ~는 전체 비트를 반전하는 데 사용하고, ^는 특정 비트만 토글하는 데 사용
2의 보수 (Two's Complement) (0) | 2025.03.05 |
---|---|
비트 연산자 ^ (XOR), << (왼쪽 시프트), >> (오른쪽 시프트) (0) | 2025.03.05 |
비트 마스킹 : 비트 연산자 (0) | 2025.03.05 |
비트 마스킹 (0) | 2025.03.05 |
📌 완전 탐색(Brute Force)과 원복(Backtracking)의 차이점 (0) | 2025.03.04 |