Java 기본 데이터 유형을 요약하여 시작하겠습니다.
byte : Byte 데이터 유형은 부호있는 8 비트 2의 보수 정수 입니다.
Short : Short 데이터 유형은 16 비트 부호있는 2의 보수 정수 입니다.
int : Int 데이터 유형은 32 비트 부호있는 2의 보수 정수 입니다.
long : Long 데이터 유형은 64 비트 부호있는 2의 보수 정수 입니다.
float : Float 데이터 유형은 단 정밀도 32 비트 IEEE 754 부동 소수점 입니다.
double : double 데이터 유형은 배정 밀도 64 비트 IEEE 754 부동 소수점 입니다.
boolean : boolean 데이터 유형은 1 비트 정보를 나타냅니다 .
char : char 데이터 유형은 단일 16 비트 유니 코드 문자 입니다.
출처
2의 보수
"좋은 예는 256 = 255 + 1이고 (255 − x)가 x의 1의 보수라는 점에 주목함으로써 2의 보수와의 관계가 실현된다는 위키 에서 나온 것입니다.
0000 0111 = 7 2의 보수는 1111 1001 = -7
작동 방식은 MSB (최상위 비트)가 음의 값을 수신하므로 위의 경우
-7 = 1001 = -8 + 0+ 0+ 1
양의 정수는 일반적으로 간단한 이진수로 저장됩니다 (1은 1, 10은 2, 11은 3 등).
음의 정수는 절대 값의 2의 보수로 저장됩니다. 이 표기법을 사용할 때 양수의 2의 보수는 음수입니다.
출처
이 답변에 대해 몇 점을 받았으므로 더 많은 정보를 추가하기로 결정했습니다.
더 자세한 답변 :
그 중에서도 양수와 음수를 이진수로 나타내는 네 가지 주요 접근 방식이 있습니다.
- 부호있는 크기
- 하나의 보완
- 2의 보완
- 편견
1. 부호있는 크기
부호를 나타내는 데 최상위 비트를 사용하고, 나머지 비트는 절대 값을 나타내는 데 사용됩니다. 여기서 0 나타내며 양수 및 1 나타내고 네가티브 번호 , 예를 들어 :
1011 = -3
0011 = +3
이 표현은 더 간단합니다. 그러나 십진수를 추가하는 것과 같은 방식으로 이진수를 추가 할 수 없으므로 하드웨어 수준에서 구현하기가 더 어렵습니다. 또한이 접근 방식은 0, 100 ... 0 및 0 .... 0을 나타내는 두 개의 이진 패턴을 사용합니다.
2. 하나의 보완
이 표현에서 우리는 주어진 숫자의 모든 비트를 반전하여 보완을 찾습니다. 예를 들면 :
010 = 2, so -2 = 101 (inverting all bits).
이 표현의 문제는 0 (00..0 및 11..1)을 나타내는 두 개의 비트 패턴이 여전히 존재한다는 것입니다.
3. 2의 보수
숫자의 음수를 찾기 위해이 표현에서는 모든 비트를 반전 한 다음 1 비트를 더합니다. 1 비트를 더하면 0을 나타내는 두 개의 비트 패턴이있는 문제가 해결됩니다.이 표현에서는 하나 (00 ... 0) 만 있습니다.
예를 들어, 4 비트를 사용하여 4 (십진수)의 이진 음수 표현을 찾고 싶습니다. 먼저 4를 바이너리로 변환합니다.
4 = 0100
그런 다음 모든 비트를 반전합니다.
0100 -> 1011
마지막으로 1 비트를 추가합니다.
1011 + 1 = 1100.
따라서 4 비트로 2의 보수 이진 표현을 사용하는 경우 1100은 십진수로 -4와 같습니다.
보완을 찾는 더 빠른 방법은 첫 번째 비트를 값 1로 고정하고 나머지 비트를 반전하는 것입니다. 위의 예에서는 다음과 같습니다.
0100 -> 1100
^^
||-(fixing this value)
|--(inverting this one)
2의 보수 표현은 0에 대한 표현이 하나 뿐인 것 외에도 십진수와 같은 방식으로 두 개의 이진 값을 더합니다. 부호가 다른 짝수입니다. 그럼에도 불구하고 오버플로 사례를 확인해야합니다.
4. 바이어스
이 표현은 부동 소수점에 대한 IEEE 754 표준의 지수를 나타내는 데 사용됩니다. 모든 비트가 0 인 이진 값이 가장 작은 값을 나타내는 이점이 있습니다. 그리고 모든 비트가 1 인 이진 값은 가장 큰 값을 나타냅니다. 이름에서 알 수 있듯이 값은 바이어스 (일반적으로 2 ^ (n-1) 또는 2 ^ (n-1) -1)가있는 n 비트를 사용하여 이진수로 인코딩됩니다 (양수 또는 음수).
따라서 8 비트를 사용하는 경우 10 진수 값 1은 2 ^ (n-1)의 바이어스를 사용하여 이진수로 표시됩니다.
+1 + bias = +1 + 2^(8-1) = 1 + 128 = 129
converting to binary
1000 0001