JAVA
비트단위 논리연산
jmeen
2021. 8. 21. 20:42
728x90
비트 단위 논리연산
X & Y | X와 Y의 비트단위 논리 곱을 생성 |
X | Y | X와 Y의 비트단위 논리합을 생성 |
X ^ Y | X와 Y의 비트단위 배타적 논리합을 생성 |
~y | y의 모든 비트단위를 반전한 값을 생성 |
1. 논리곱 ( X & Y )
비트 두개를 놓고, 두 수를 곱해 1이 되어야 1이다.
X | Y | X & Y |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
2. 논리합 ( X | Y )
비트 두개를 더해 1이 되면 1이다. 두개 모두 1이어도 1이다.
X | Y | X | Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
3. 배타적 논리합 ( X ^ Y )
두개의 비트중에 하나만 1이어야 1이다.
두 비트 모두 1이면 0이 된다.
X | Y | X ^ Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
4. 논리 부정
무조건 반대인 것을 작성한다.
X | ~X |
1 | 0 |
0 | 1 |
1. pos번째의 비트를 1로 바꾼 값 구하기
5번째 비트가 1로 변경한걸 구해라.
x | 0001 1010 0110 |
1 | 0000 0000 0001 |
1<<5 | 0000 0001 0000 |
x | (1<<5) | 0001 1011 0110 |
2. pos 번째의 비트를 0으로 바꾼 값 구하기
- 특정 자리의 비트를 0으로 만들고, 논리곱을 한다.
- 논리곱 : 두개의 비트를 곱해 1이 나와야 1
x | 0001 1010 0110 |
1 | 0000 0000 0001 |
~(1<<5) | 1111 1110 1111 |
x & ~(1<<5) | 0001 1010 0110 |
3. post번째의 비트를 반전시킨 값 구하기
- 특정자리의 비트의 반전 값을 반환한다.
x | 0001 1010 0110 |
1 | 0000 0000 0001 |
(1<<5) | 0000 0001 0000 |
x ^ (1<<5) | 0001 1011 0110 |
post번째부터 n번째까지 연속된 값 바꾸기
- for를 사용하는것이 아니다. 아래와 같은 순서로 공식을 만들어 사용한다.
이것을 이용해 1로 바꾸거나, 0으로 바꾸거나, 반전시키거나 응용하여 사용할 수 있다.
0 | 0000 0000 0000 0000 |
~0 | 1111 1111 1111 1111 |
~0 << 5 | 1111 1111 1110 0000 |
~(~0 << 5) | 0000 0000 0001 1111 |
~(~0 << 5) << 5 | 0000 0011 1110 0000 |