10진수를 2진수로, 2진수를 10진수로 변환할 수 있습니다. 그런데 숫자 "256"을 어떻게 표현할 수 있을까요?
255 = 11111111
1바이트는 8개 이상의 이진수(비트)를 가질 수 없습니다. 이것이 어떻게 가능한지?
답변1
256을 이진수로 표현하는 방법을 묻는 질문에 바이트가 저장하는 최대 숫자는 255인데 왜 사람들이 바이트가 256개의 다른 숫자를 저장할 수 있다고 말하는지 궁금할 것입니다. Claudiop이 말했듯이 컴퓨터는 0부터 계산하기 시작하므로 0입니다. 는 실제로 첫 번째 숫자이고, 1은 두 번째, 2는 세 번째입니다. 255는 256번째입니다.
또한 11111111은 부호 없는 바이트의 경우 255에 불과합니다. 부호 있는 바이트(부호 있는 값은 음수 값을 가질 수 있는 값)가 있는 경우 11111111은 실제로 -1입니다. 보다http://en.wikipedia.org/wiki/Two's_complement. 2의 보수가 작동하는 방식으로 양수에 음수를 추가하면 0이 됩니다. 다른 사람들이 말했듯이 11111111에 비트를 추가하고 데이터 유형이 8비트만 지원할 수 있으면 마지막 비트가 오버플로되어 다음과 같은 결과가 남습니다. 0. 부호 있는 바이트의 경우 값 범위는 -128부터 127까지입니다. 128개의 음수 + 0 + 127개의 양수 = 총 256개의 숫자입니다.
부호 있는 값의 경우 첫 번째 비트는 "부호" 비트입니다. 이 비트가 설정되면 숫자는 음수입니다. 10000000은 음수, 01000000은 양수, 11111111은 음수, 01111111은 양수입니다.
Windows를 사용하는 경우(Mac에도 있을 수 있음) 계산기를 열고 프로그래머 모드로 전환한 다음 sbyte를 선택하고 비트를 가지고 놀면서 십진수 표현과 어떻게 연관되는지 확인할 수 있습니다.
답변2
이를 표현하려면 2바이트가 필요합니다. 256 = 00000001 00000000
답변3
이미 알고 있듯이 255d(10진수)는 11111111b(2진수)와 같습니다. 이제 값에 1을 추가하려는 경우 두 가지 가능성이 있습니다.
둘 중 하나는 8비트뿐입니다. 이런 경우 소위과다발생합니다. 따라서 "내부적으로" 1이 추가되어 100000000b(9비트에서는 256d)가 됩니다. 그러나 8비트만 사용할 수 있으므로 하위 8비트가 "반환"됩니다. 따라서 0d = 0b로 끝납니다. (대부분의 컴퓨터 아키텍처에는 참고 사항으로 특별한 오버플로 플래그가 설정됩니다.)
손가락으로 숫자를 세는 것과 같다고 생각하세요. 당신의 손가락이 9d를 보여준다고 상상해보세요. 이제 손가락을 하나 더 추가합니다. 결국 10개가 됩니다. 하나라도 더 추가하고 싶다면 어떻게 하시나요?
또 다른 가능성은 8비트 이상을 사용할 수 있다는 것입니다. 이 경우 시작 부분에 숫자를 하나 더 추가하면 실제로 결과는 100000000b = 256d가 됩니다.
바이트는 컴퓨터 시스템(메모리 시스템)이 처리할 수 있는 가장 작은 "단위"입니다. 즉, 단일 비트만 알고 싶다면 메모리 시스템에 주소에서 특정 바이트를 제공하도록 요청한 다음 관심 있는 비트의 값을 스스로 파악해야 한다는 의미입니다.
그러나 8비트가 1바이트를 구성하는 것과 마찬가지로 더 큰 데이터 유형도 있습니다. 2바이트가 워드(16비트)를 구성하고, 워드 2개(4바이트, 32비트)가 더블 워드를 구성합니다. 그리고 요즘 표준 64비트 아키텍처에는 64비트 데이터 유형(소위 레지스터)도 있습니다.