우당탕탕 개발일지
[기초-비트단위논리연산] 비트단위로 출력하기 본문
** 비트단위(bitwise) 연산자는,
~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor),
<<(bitwise left shift), >>(bitwise right shift)
가 있다.
비트단위로 NOT하여 출력하기
입력 된 정수를 비트단위로 참/거짓을 바꾼 후 정수로 출력하기
비트단위(bitwise)연산자 ~ 를 붙이면 된다.(~ : tilde, 틸드라고 읽는다.)
예를 들어 4진수의 경우 6은 0110이고, ~6은 1001, 즉 -7에 해당하게 된다.
~n = -n - 1 관계를 기억하자! (ex. ~1 = -2)
비트단위로 AND하여 출력하기
입력된 정수 두 개를 비트단위로 and 연산한 후 그 결과를 정수로 출력하기
비트단위(bitwise)연산자 &를 사용하면 된다.(and, ampersand, 앰퍼센드라고 읽는다.)
예를 들어 3과 5가 입력되었을 때를 살펴보면
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 & 5 : 00000000 00000000 00000000 00000001
이 된다.
비트단위 and 연산은 두 비트열이 주어졌을 때,
둘 다 1인 부분의 자리만 1로 만들어주는 것과 같다.
비트단위 and 연산은 두 비트열이 주어졌을 때,
둘 다 1인 부분의 자리만 1로 만들어주는 것과 같다.
이 연산을 이용하면 어떤 비트열의 특정 부분만 모두 0으로도 만들 수 있는데
192.168.0.31 : 11000000.10101000.00000000.00011111
255.255.255.0 : 11111111.11111111.11111111.00000000
두 개의 ip 주소를 & 연산하면
192.168.0.0 : 110000000.10101000.0000000.00000000 을 계산할 수 있다.
실제로 이 계산은 네트워크에 연결되어 있는 두 개의 컴퓨터가 데이터를 주고받기 위해
같은 네트워크에 있는지 아닌지를 판단하는데 사용된다.
이러한 비트단위 연산은 빠른 계산이 필요한 그래픽처리에서
마스크연산(특정 부분을 가리고 출력하는)을 수행하는 데에도 효과적으로 사용된다.
비트단위로 OR하여 출력하기
비트단위 연산자 |(or, vertical bar, 버티컬바)를 사용하면 된다.
예를 들어 3과 5가 입력되었을 때를 살펴보면
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 | 5 : 00000000 00000000 00000000 00000111
이 된다.
둘 중 하나라도 1인 자리를 1로 만들어주는 것과 같다.
이러한 비트단위 연산은 빠른 계산이 필요한 그래픽처리에서도 효과적으로 사용된다.
비트단위로 XOR하여 출력하기
비트단위(bitwise) 연산자 ^(xor, circumflex/caret, 서컴플렉스/카릿)를 사용하면 된다.
예를 들어 3과 5가 입력되었을 때를 살펴보면
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 ^ 5 : 00000000 00000000 00000000 00000110
이 된다.
정리
NOT | AND | OR | XOR | |
비트단위 연산자 | ~ : tilde, 틸드 | &: and, ampersand, 앰퍼센드 | |: or, vertical bar, 버티컬바 | ^(xor, circumflex/caret, 서컴플렉스/카릿) |
기능 | 0을 1로, 1을 0으로 바꿔줌 | 두 개의 비트열에서 모두 1인 부분은 1로, 그 외는 0으로 바꿔줌 | 두 개의 비트열에서 하나라도 1이면 1로, 그 외는 0으로 바꿔줌 | 두 개의 비트열에서 다르면 1, 같으면 0 |
'알고리즘' 카테고리의 다른 글
[알고리즘] 백준 2828번 사과 담기 문제 (0) | 2023.10.02 |
---|---|
[기초-3항연산] 정수 2개 입력받아 큰 값 출력하기 (0) | 2023.09.28 |
[알고리즘] 그리디 알고리즘 실전문제1: 거스름돈 문제 (0) | 2023.09.26 |
[알고리즘] 그리디 알고리즘, 실전문제 3개 및 백준 문제 (0) | 2023.09.26 |
[기초-논리연산] 정수 입력받아 참 거짓 평가하기(설명)(py) (0) | 2023.09.26 |