해결된 질문
작성
·
98
답변 2
0
안녕하세요.
말씀하신 것이 맞습니다.
제가 설명할 때 2의 보수에 대해서는 설명하지 않았기 때문에 음수에 대한 설명이 없어 헷갈릴 수 있습니다.
정확히는 10진수 5는 0000 0101
로 표기됩니다. (0이 많아서 8개로만 표기합니다.)
앞에 수 많은 0000을 더 붙여야 하고 이는 C언어에서 부호까지 정하는 비트입니다.
이 경우 ~ (NOT)을 붙이면 1111 1010
가 됩니다.
32비트 컴퓨터의 기준에서 10진수 5는 앞에 0을 가득 채우고 마지막에 0101이 되고, ~5는 앞에 1을 가득 채우고 마지막에 1010이 붙는 형태가 됩니다.
부호를 포기하면 0붙 4,294,967,295까지 표현할 수 있고 부호를 포함하는 형태로 사용하겠다고 하면 대략 절반 정도의 음수부터 양수까지를 표현합니다.
C언어에서 이 경우에는 부호 비트까지 포함해서 음수로 표현된 형태가 됩니다.
int (정수) 형태는 제가 알려드리지는 않았지만, 보통 대부분의 운영체제에서 4바이트의 크기를 갖습니다. 이것은 비트가 32개라는 것인데 이 형태에서 정수의 모든 형태를 다 담아야 합니다. 당연히 한계가 있겠죠. int 형태는 애초에 담을 수 있는 가장 큰 숫자가 정해져 있습니다.
그래서 저 비트 안에서 음수까지를 표현해야 합니다. 그래서 보수라는 개념이 나오는데.. 굳이 암기하실 필요는 없어 보입니다.
이는 실제로 음수로 표현된 것과 양수로 표현된 것을 계산해보면 이해가 쉬운데, 그렇게 까지 깊게 들어가는 것을 권장 드리지 않습니다.
이런 개념은 시험에 나오지 않습니다. 결과 정도만 알아두시면 좋을 것 같네요.
조금 더 궁금하시다면,
아래 자료를 참고해보시면 좋습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 관히님.
비트 연산자에 대한 질문에 대해 답변드리겠습니다. 비트 연산에서 ~
연산자는 비트를 반전시킵니다. 예를 들어 a
가 5
일 때, 이진수로 표현하면 0101
입니다. ~a
는 각 비트를 반전시켜 1010
이 됩니다. 하지만 이것은 부호가 있는 정수일 때 2의 보수 체계에 따라 음수를 나타내기 때문에, 실제 값은 -6이 됩니다.
관련 참고 자료로 비트 연산자
에 대한 설명을 제공하는 기존 질문 게시물을 소개해 드리겠습니다:
위 링크들을 통해 비트 연산자가 어떻게 동작하는지, 특히 연산자의 결과로 생성되는 값이 어떻게 해석되는지에 대해 더 깊이 이해하실 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.