프로그래밍 언어를 초반에 배울 때,
비트연산에 대해 배운 적이 있었습니다.
당시 제가 느끼기에는
갑자기 비트연산을 쑥 배우고
시험용으로 공부하는 영역이었습니다.
"안 쓰는데 이럴꺼면 왜 배우는거야??"
괜히 머리만 아프고 복잡하고 이런 비트연산을
쓰지도 않는데...그냥 허세용으로 배우는걸까?
많은 프로그래머들도 이런 생각을 합니다.
특히나 C를 배우지 않은 분들은
비트연산을 접할 기회가 더 없다보니
"비트연산??그게 뭐임??"하시는 분들도 많습니다.
사용하기도 힘들고 복잡한 이 비트연산.
도대체 왜 사용하는걸까?
여태까지 공부하면서 느꼈던 것들을 총 정리했습니다.
(아래 예시를 보면서 빠진 내용이 있다면 댓글로 알려주세요)
비트연산을 활용하는 대표적인 예시로
7세그먼트가 있습니다.
7세그먼트는 7가지의 비트로 이뤄져있습니다.
만약에 여러분들이 7과 비슷한 모양을 출력하고 싶다고 해보겠습니다.
그럼 A,B,C에 해당하는 곳을 키면 되겠죠??
만약에 8개의 비트가
ABCDEFG(DP)순으로 되어있고
1일때 켜지고 0일때 꺼진다고 가정하면
위의 그림에 있는데로 비트를 입력하면 7같은 모양으로 동작합니다.
이외에 다른 숫자라든가
숫자가 아닌 다른 문자까지 생각하면
훨씬 더 많은 경우가 있다는 걸 알 수 있습니다.
내가 원하는 곳에 값을 인가한다면
7세그먼트를 내가 원하는 데로 제어할 수 있겠네요.
이거를 좀 더 복잡한 HW를 제어하는 걸로 확장해보겠습니다.
로봇에는 수 많은 부품들이 있을 겁니다.
특정 부위의 어떤 부품을 키고 끄는 작업들을 많이 하게 됩니다.
그럴 때, 비트연산을 활용해서
몸 전체 중 어디를 움직일지 제어하고
그 부위 중 어디를 사용할지 제어하는 식으로
비트연산을 활용해볼 수 있습니다.
2023.05.26 - [노베이스도 이해하는 공학이야기] - 컴퓨터는 어떻게 데이터를 전송할까? 씨리얼 통신을 알아보자
이 부분은 예전에 정리한 글을 참조하시면 됩니다.
(HW제어를 씨리얼통신으로 주고받기 때문에
HW제어의 연장으로 생각하셔도 됩니다)
우리가 체스게임을 한다가정해보면
엄청나게 많은 경우의 수가 떠오를 겁니다.
말을 어디로 어떻게 움직이느냐에 따라
상대방에 어디에 뭘 넣는지에 따라
엄청나게 많은 경우의 수가 생깁니다.
각 판을 하나의 비트로 둔다면
2^(체스판 수)->엄청 큰 수가 나옵니다.
움직일 수 있는 경우,없는 경우를 1과 0으로 둔다면
각 경우가 어떻게 흘러가는지 파악이 가능해
더 많은 경우의 수를 제어할 수 있습니다.
비밀번호라든가 토큰 등을 만들 때
암호화하는 과정을 거칩니다.
암호화키를 만들 때, 비트연산을 통해
원본키를 기준으로 복호화가 되는 값을 지정해줍니다.
이후에 암호화 키가 맞는지 확인할 때
복호화해서 원본 키가 나오는지 체크해줍니다.
비트연산은 프로그래머라면 한 번쯤은 들어봤을 용어인데도
언제 어떻게 사용하는가에 대해 정리한 글을 찾기가 힘들었습니다.
지식을 배우는 것도 중요하지만
어디에 어떻게 쓰는지 아는 것도 중요하다 생각해
간략하게 간추려 정리해봤습니다.
네트워크서비스는 어떻게 이뤄질까? (0) | 2023.08.03 |
---|---|
파일시스템은 왜 쓰는 걸까? 파일시스템과 DB의 관계는?? (0) | 2023.08.02 |
git은 왜 쓰는 걸까?? (0) | 2023.07.29 |
비동기식 프로그래밍이 필요한 이유 (0) | 2023.07.25 |
프로세스 관리는 어떻게 이뤄질까? (0) | 2023.07.21 |
댓글 영역