#include<iostream>
using namespace std;
int main()
{
int s = 15; // 0b1111 (10진수 15)
int a = 15; // 0b1111 (10진수 15)
cout << "s : " << s << endl;
int ind = 2; // 비트 조작할 위치 (2번째 비트)
int ind2 = 1; // 비트 조작할 위치 (1번째 비트)
s &= ~(1 << ind); // 특정 비트를 0으로 만들기
a ^= (1 << ind2); // 특정 비트를 토글하기
cout << "s : " << s << endl; // 결과: 11
cout << "a : " << a << endl; // 결과: 13
return 0;
}
s : 15
s : 11
a : 13
s &= ~(1 << ind);
1 << 2 = 0b0001 → 0b0100 (십진수 4)
~(0b0100) = 0b1011 (십진수 -5)
0b1111 (15)
& 0b1011 (-5)
----------
0b1011 (11)
✅ 즉, 2번째 비트(0b0100)를 0으로!
a ^= (1 << ind2);
1 << 1 = 0b0010 (십진수 2)
0b1111 (15)
^ 0b0010 (2)
----------
0b1101 (13)
✅ 즉, 1번째 비트(0b0010)를 반전(1 → 0 또는 0 → 1)!
연산 연산 결과 (비트) 결과 (십진수)
s &= ~(1 << 2); | 0b1011 | 11 |
a ^= (1 << 1); | 0b1101 | 13 |
🔍 최하위 켜져 있는 비트 찾기 (S & -S) (0) | 2025.03.06 |
---|---|
🔍 최하위 켜져 있는 비트 찾기 (S & -S) (0) | 2025.03.06 |
2의 보수 (Two's Complement) (0) | 2025.03.05 |
비트 연산자 ^ (XOR), << (왼쪽 시프트), >> (오른쪽 시프트) (0) | 2025.03.05 |
🔍 ~ (비트 NOT) vs ^ (비트 XOR) 연산 차이점 (0) | 2025.03.05 |