그렇다면 8비트가 되는 char
거죠 1 byte
, 그렇죠?
그러면 2 ^ 8 = 256이고 0에서 255까지의 문자 범위는 무엇입니까?
부호 있는 정수와 부호 없는 정수에서는 어떻게 작동합니까? int는 4바이트이므로 32비트이므로 2 ^ 32
. 2 ^ 31 - 1은 부호 있는 정수의 양수 범위를 제공하므로 32번째 비트는 어떻게 되나요? 간판에 사용되나요? 기호는 메모리에 어떻게 저장됩니까?
답변1
데이터 유형이 부호 있는 유형으로 정의된 경우 다양한 유형의 표현(주로 부호 있는 크기 표현 및 2의 보수 표현)이 있습니다.
부호 있는 크기 표현의 경우, 부호 비트가 최상위 비트(MSB, 즉 가장 왼쪽 비트)로 저장되었습니다. MSB 0은 양수를 나타내고 1은 음수를 나타냅니다. 예:
7 = 00000111
-7 = 10000111
이는 간단하고 (상대적으로) 사람이 읽을 수 있지만 정수 유형은 일반적으로~ 아니다두 가지 문제에 대해 이런 방식으로 유지되었습니다.
(1) 0에는 +0과 -0의 두 가지 표현이 있습니다. 특수한 경우가 생기기 때문에 수치를 비교하는 것이 번거롭습니다.
(2) 계산(덧셈, 뺄셈처럼 간단한)을 하기가 쉽지 않습니다. 두 개의 양수를 더하는 것, 음수에 양수를 더하는 것, 양수에 음수를 더하는 것, 두 개의 음수를 더하는 것은 네 가지 다른 사용 사례입니다. 예를 들어 7+6은 간단합니다.
1 Carry bit
7 = 00000111
6 = 00000110 (Logic for add)
.. ........
13 = 00001101
7+(-6)을 계산하는 동안 대신 사용되는 빼기 논리를 의미합니다.
7 = 00000111
-6 = 10000110 (Logic for subtraction)
.. ........
1 = 00000001
따라서 8비트 숫자의 범위는 -(2^7)+1 ~ 2^7-1(예: -127 ~ +127, 두 개의 0 +0과 -0)입니다. 부호 있는 크기 표현은 주로 부동 소수점 숫자를 유지하는 데 사용됩니다.
그리고 이는 2의 보수 표현으로 이어집니다. 양수는 부호 있는 크기 표현과 같은 방식으로 표현됩니다. 부호 비트 변경은 두 단계로 이루어집니다. (1) 모든 비트 반전(0을 1로, 1을 0으로 모두 변경) (2) 1을 추가합니다.
예를 들어, -6을 표현하려면 다음 단계를 수행합니다.
6 = 00000110
Invert all bits: 11111001
Add one: 11111010
따라서 -6은 로 표시됩니다 11111010
. 2의 보수 표현을 사용하면 MSB에서 부호를 계속 읽을 수 있습니다. 0에 대한 표현은 단 하나뿐입니다: 00000000
.
2의 보수 표현에서도 이진수를 사용하여 계산을 수행하는 것이 쉽습니다. 덧셈은 덧셈입니다. 7+(-6)을 계산하는 방법을 다시 살펴보겠습니다.
1111111 Carry bit
7 = 00000111
-6 = 11111010 (Logic for add)
.. ........
1 = 00000001
따라서 8비트 숫자의 범위는 -(2^7) ~ 2^7-1(예: -128 ~ +127)입니다. 범위는 부호 있는 크기 표현과 다릅니다.