10 진수를 2 진수로, 2 진수를 10 진수로 변환 할 수 있습니다. 그러나 숫자 "256"을 어떻게 표현할 수 있습니까?
255 = 11111111
1 바이트는 8 진 숫자 (비트)를 초과 할 수 없습니다. 이것이 어떻게 가능한지?
10 진수를 2 진수로, 2 진수를 10 진수로 변환 할 수 있습니다. 그러나 숫자 "256"을 어떻게 표현할 수 있습니까?
255 = 11111111
1 바이트는 8 진 숫자 (비트)를 초과 할 수 없습니다. 이것이 어떻게 가능한지?
답변:
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 비트 만 지원할 수 있으면 마지막 비트가 오버플로되고 부호있는 바이트의 경우 값의 범위는 -128에서 127 사이입니다. 128 개의 음수 + 0 + 127 개의 양수 = 256 개의 숫자입니다.
부호있는 값의 경우 첫 번째 비트는 "sign"비트입니다. 이 비트가 설정되면 숫자는 음수입니다. 10000000은 음수, 01000000은 양수, 11111111은 음수, 01111111은 양수 ...
Windows를 사용하는 경우 (Mac에서도 가능) 계산기를 열고 프로그래머 모드로 전환하고 sbyte를 선택한 다음 비트를 가지고 십진수 표현과 어떻게 관련이 있는지 확인할 수 있습니다.
이미 알고 있듯이 255d (10 진수)는 11111111b (2 진)와 같습니다. 이제 값에 1을 추가하려면 두 가지 가능성이 있습니다.
8 비트 만 있습니다. 이 경우 소위 오버플로 가 발생합니다. 따라서 "내부적으로"1이 추가되어 100000000b (9 비트의 256d)가됩니다. 그러나 8 비트 만 사용할 수 있으므로 하위 8 비트는 "반환"됩니다. 따라서 0d = 0b로 끝납니다 (특별 오버플로 플래그는 대부분의 컴퓨터 아키텍처에서 부수적으로 설정됩니다).
이것을 손가락으로 계산하는 것과 동일하게 생각하십시오. 손가락이 9d라고 상상해보십시오. 이제 손가락을 하나 더 추가하십시오. 10으로 끝납니다. 하나 더 추가하려면 어떻게해야합니까?
다른 가능성은 8 비트 이상을 사용할 수 있다는 것입니다. 이 경우 시작 부분에 숫자를 하나 더 추가하면 결과는 실제로 100000000b = 256d입니다.
바이트는 컴퓨터 시스템 (메모리 시스템)이 처리 할 수있는 가장 작은 "단위"입니다. 즉, 단일 비트 만 알고 싶다면 메모리 시스템에 주소에서 특정 바이트를 제공하도록 요청한 다음 관심있는 비트의 값을 파악해야합니다.
그러나 8 비트가 바이트를 구성하는 것과 같은 방식으로 더 큰 데이터 유형이 있습니다. 2 바이트는 워드 (16 비트)를 구성하고 2 워드 (4 바이트, 32 비트)는 이중 워드를 구성합니다. 그리고 현재 표준 64 비트 아키텍처에는 64 비트 데이터 유형 (레지스터라고도 함)이 있습니다.