일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 으
- 스터디
- Unseen
- 디자드
- 데이터베이스
- Express
- 파이썬서버
- R
- Ajax
- 마인크래프트뮤지컬
- 언리얼프로그래머
- VUE
- 프린세스메이커
- Bootstrap4
- 언리얼
- 카렌
- 정글사관학교
- EnhancedInput
- 미니프로젝트
- 레베카
- 프메
- 알고풀자
- 스마일게이트
- Jinja2
- Enhanced Input System
- 게임개발
- node
- JWT
- flask
- 언리얼뮤지컬
- Today
- Total
Showing
[TIL] 비트연산자, 비트마스킹, 외판원 순회 본문
0. Today I Learned
안녕하세요! FlyDuck Dev🦢입니다.
오늘은 비트마스킹을 활용해야 하는 DP 문제(외판원 순회)를 풀기 위해서, 비트연산에 대해서 알아보는 시간을 가졌습니다. TIL 목적상, 문어체로 작성하게 됨을 미리 밝힙니다!
🔭오늘의 공부 자료
(2) 주니온 연구소님의 강좌
1. 비트 연산자
&
|
비트단위로 AND 연산을 한다.
|
|
|
비트단위로 OR 연산을 한다.
|
^
|
비트단위로 XOR 연산을 한다.
|
~
|
피연산자의 모든 비트를 반전시킨다.
|
<<
|
피연산자의 비트 열을 왼쪽으로 이동시킨다.
|
>>
|
피연산자의 비트 열을 오른쪽으로 이동시킨다.
|
비트연산자 기초 &, |
&는 true & true = true (1 & 1 = 1)고 나머지는 모두 false를 반환한다.
0 & 0
|
0
|
0 & 1
|
0
|
1 & 0
|
0
|
1 & 1
|
1
|
만약 1001 & 1000을 1000이 된다.
|는 하나라도 true면 모두 true가 된다.
0 | 0
|
0
|
0 | 1
|
1
|
1 | 0
|
1
|
1 | 1
|
1
|
만약 1001 | 1000을 하면 1001이 되고,
1001과 0110을 하면 11111이 된다.
비트연산자 기초 <<, >>
왼쪽 시프트 연산자 << , 오른쪽 시프트 연산자 >>
a << b는 a라는 비트를 b만큼 왼쪽으로 옮긴다는 의미이다.
예를 들어 111(7) << 1 한다면 1110(14)이 되고
111(7) << 2를 하면 11100(28)이 된다.
즉, a << b 는 a * 2 ^ b와도 같은 의미이다.
비트마스킹할 때는 (1 << value)꼴로 많이 쓰인다.
1 << 3은 1000(8)
1 << 4은 10000(16)
오른쪽 시프트 연산자 >> 는 다음과 같이 비트를 오른쪽으로 옮기는 것을 말한다.
a >> b는 a라는 비트를 b만큼 오른쪽으로 옮긴다는 의미이다.
101(5) >> 1을 하면 010(2)
1111(15) >> 2는 0011(3)
비트연산자 기초 ^, ~
XOR연산자, ^
true ^ true = false, false ^ false = false 이며 나머지는 다 true를 반환한다.
같으면 싫어한다고 외워도 좋다.
0 ^ 0
|
0
|
0 ^ 1
|
1
|
1 ^ 0
|
1
|
1 ^ 1
|
0
|
1001(9)^ 1000(8)은 0001
1010(10) ^ 1000(8) 0010
1의 보수연산자이며 이는 해당 수의 모든 비트를 반전하는 연산자이다.
~value = -(value + 1)
~value + 1 = -value
2. 백준 외판원 문제
'Today I Learned (TIL)' 카테고리의 다른 글
[TIL] 언리얼 네트워크 플레이어 프로그래밍 (0) | 2024.01.11 |
---|---|
[비쥬얼스튜디오] 자주쓰는 단축키 모음 (0) | 2023.12.29 |
[git, source Tree] 소스트리에서 롤백 (0) | 2023.11.29 |
[TIL] 어셈블리어 레지스터 기초 실습, 프로그래머용 계산기 다뤄보기 (2) | 2023.03.29 |