정수 표현 (1) sign-magnitude (2) complement
부동소수점 표현 Excess-K
(1) sign-magnitude(부호-절대값 방식)
맨 앞의 비트를 사인부호로 둠 ( 0 : 양수 / 1 : 음수)
23 + (-23) = 0
0000 0000 0000 0000 0000 0000 0001 0111
+1000 0000 0000 0000 0000 0000 0001 0111
---------------------------------------------------
1000 0000 0000 0000 0000 0000 0010 1110 = -46
- 두 개의 0(+0, -0)이 존재한다.
- 양수와 음수를 더했을 때 옳지 않은 값이 나온다.
(2) 보수(complement)
반대로 세어가는 수. 컴퓨터로 뺄셈을 할 경우, 실제로는 보수를 사용한 덧셈.
(2-1) 1's complement (1의 보수)
모든 비트를 더해서 1이 되는 수로 바꾼다. 0을 1로, 1을 0으로.
0000 0000 0000 0000 0000 0000 0001 0111 (23)
1111 1111 1111 1111 1111 1111 1110 1000 (-23)
---------------------------------------------------
1111 1111 1111 1111 1111 1111 1111 1111
+ 1
---------------------------------------------------
1 0000 0000 0000 0000 0000 0000 0000 0000 -> 맨 앞의 1은 메모리 초과로 사라지는 수. 항상 음수를 더할 때는 항상 결과에 1을 추가해야 한다
(2-2) 2's complement (2의 보수)
1의 보수로 저장된 음수 값을 더할 때 마다 계산 결과에 1을 추가하는 번거로움을 없애기 위해 미리 음수를 저장할 때 1을 추가해 두는 방법 (1의 보수 + 1(초과된 값) => 2의 보수)
컴퓨터에서 음수를 메모리에 저장할 때는 양수와 음수를 더할 때 정상적인 값이 나오도록 2의 보수 방법으로 음수를 저장함
자바에서 음수를 저장하는 방법. 양수와 음수의 덧셈이 가능하다.
음수 0을 없앤 것.
- 2의 보수를 만드는 방법 2
-오른쪽에서부터 1을 찾고, 찾은 1의 왼쪽편에 있는 모든 비트를 반대 값으로 바꾼다.
0010 1001 (41) => 1101 0111 (-41)
0010 1100 (44) => 1101 0100 (-44)
0000 0000 0000 0000 0000 0000 0001 0111
+1111 1111 1111 1111 1111 1111 1110 1001
---------------------------------------------------
1 0000 0000 0000 0000 0000 0000 0000 0000
K-초과 (Excess-K)
부동소수점의 지수부(exponent) 저장할 때 사용
'프로그래밍 > CS' 카테고리의 다른 글
| 인터페이스 (0) | 2019.12.11 |
|---|---|
| 문자의 표현 - Character Set (0) | 2019.12.09 |
| 실수의 표현 - 부동소수점 (0) | 2019.12.09 |
| 데이터의 코드화, 리터럴, 이스케이프 문자 (0) | 2019.12.07 |
| 해석기 - 컴파일러 인터프리터 어셈블러 (0) | 2019.12.07 |