?
System or Radix-?
System 이라고 불림. ?
는 base에 해당하는 수Binary Coded Decimal(BCD)
와 같은 base-10 기반으로 숫자를 bit로 표현하는 방식도 있지만 실제 컴퓨터 내부 연산에서는 사용하지 않음.unsigned
키워드가 붙은 경우 positive 만을 표현unsigned char
: 8bits, 1byteunsigned short(int)
: 16bits, 2bytesunsigned long(int)
: 32bits, 4bytesunsigned int
: 32bits, 4bytesunsigned long long(int)
: 64bits, 8bytesMSB
가 sign을 나타내고 나머지 bit들은 positive integer와 마찬가지로 magnitude를 나타냄.positive integer 표현에서 모든 bit에 NOT
연산을 취함으로서 대응되는 negative integer를 구하는 방법
Ex. 011(=+3)에
NOT
연산을 취하면 100이 되고 이를 -3으로 삼는다.
+0과 -0에 대한 표현이 각각 존재한다.
Ex. 011(=+3)의 1's complement인 100에 1을 더한 101이 -3의 표현형이 됨.
MSB
에서 carry out(=End around carry)가 발생할 경우, 1's complement
는 해당 MSB에서 carry out을 LSB에 더해주면 되고, 2's complement
는 해당 MSB에서 carry out을 그냥 빼줌.Example 1
Decimal | Sign and Magnitude | 1's complement | 2's complement |
---|---|---|---|
5 | 00000101 | 00000101 | 00000101 |
-8 | 10001000 | 11110111 | 11111000 |
result | |||
-3 | 10000011 | 11111100 | 11111101 |
Example2
Decimal | Sign and Magnitude | 1's complement | 2's complement |
---|---|---|---|
8 | 00001000 | 00001000 | 00001000 |
-5 | 10000101 | 11111010 | 11111011 |
MSB carry out | 100000010 | 100000011 | |
result | |||
3 | 00000011 | 00000011 | 00000011 |
carry in
, carry out
이 다를 경우 overflowcarry in
: 이전 자리의 연산 결과로 carry가 넘어온 것carry out
: 현재 자리의 연산 결과로 carry가 발생한 것Example
No overflow | No overflow | overflow | overflow |
---|---|---|---|
(carry) 110000000 | (carry) 001111000 | (carry) 010000000 | (carry) 101111100 |
(+65) 01000001 | (-65) 10111111 | (+65) 01000001 | (-65) 10111111 |
(-44) 11010100 | (+44) 00101100 | (+90) 01011010 | (-90) 10100110 |
result | |||
(+21) 00010101 | (-21) 11101011 | (-101) 10011011 | (+101) 01100101 |
condition code registor(CCR)
의 overflow에 해당하는 bit가 '1'로 설정.<소수의 2진수 표현>
1. 10진수의 소수값에 2를 곱함.
2. 2를 곱한 결과가 1 미만이면 0을 기록, 1 초과할 경우 1을 기록하고 결과값에서 1을 뺌.
3. 위 과정들을 반복하며 결과값이 1이 나온 경우 1을 기록하고 변환을 끝냄.
Example
0.5 | 0. |
---|---|
0.5 x 2 = 1.0 | 1 |
실수의 2진수 표현을 bit로 표현하는 방법은 크게 Fixed-point Representation
과 Floating-point Representation
이 있다.
Fixed-point Representation
: 기존의 integer를 표현하던 방식 그대로 사용
Floating-point Representation
: 소수점의 위치가 고정되지 않고 변경됨. Scientific Notation에 기반.
cf) Scientific Notation
- y는 0이 아닌 integer
일반적인 computer에서는 Float-point representation이 사용되며 일부 DSP(Digital Signal Processing) system에서만 fixed-point representation이 사용됨.
Fixed-point representation는 동일한 크기의 bit로 표현할 수 있는 수의 range가 Floating-point representation에 비해 너무나 작음.
float
라고 부름.IEEE 754
로 표준화 되어 있음.Base
: 몇 진수인지 나타냄.Exponent
: 수치의 크기 결정Mantissa
: 표현가능한 유효 숫자. precision을 결정.Example in Decimal
=> =>
- 10이
Base
- 3,8이
exponent
- 123456, 1.23456이
mantissa
변수형 | 크기 및 정확도 | 사용되는 곳 | 구조(bit) |
---|---|---|---|
float (or float32 ) | 32bit single precision | memory | s(1)+e(8)+m(23) |
double (or float64 ) | 64bit double precision | memory | s(1)+e(11)+m(52) |
mantissa
에 할당된 bit가 많아질수록 정밀도가 향상됨.NaN
, Not a Number)들도 쉽게 처리 가능.Example: 를 IEEE 754 single-precision 형식으로 표현.
S = 1 (-)
E = 00000011(exponent 3) + 01111111(bias 127) = 10000010
M = 10110100000000000000000
Sign
은 양수면 0
, 음수면 1
Exponent
는 exponent 값에 bias 값 127을 더해줌. double-precision인 경우 1023을 더해줌.Mantissa
는 Decimal을 Binary로 변환 후 Scientific Notation 형태로 나타낸 후에 소수점 뒤의 숫자를 나타냄. 23bit 크기만큼 0을 채워줌.Internal representation
: 계산이 효과적으로 이루어지는데 집중.External representation
: 숫자를 보여주거나 입력장치로부터 숫자(엄밀하게는 숫자 기호)를 입력받을 때 사용.10진수에서 각 자리 digit을 4bit binary로 변환하여 표현
8-4-2-1 code 라고도 불림.
Example
23 =>2
:0010
,3
:0011
로 변환하여 최종적으로0010 0011
로 표시됨.
10진법에서 2진법으로 변환을 가장 쉽게 할 수 있다는 장점.
bit의 낭비가 크고 complement를 구현하기 어렵다는 단점 존재.
BCD code를 확장하여 8bit로 표현.
상위 4bit가 Zone을 나타내고, 하위 4bit가 BCD를 가리킴.
일반적으로 Zone은 1111
로 표현.
sign
부호는 가장 하위자리 Zone으로 표현, +
sign은 1100
, -
sign은 1101
로 표현.
Example :
Zone 8 Zone 9 Sign 7 1111 1000 1111 1001 1100 0111
숫자만 사용하는 경우 낭비가 심함.
Packed 10진수 방식과 같이 zone을 제거하고 BCD만 사용하는 경우도 있음.
XOR
연산하여 만들어진 코드Decimal | BCD | Express-3 | Gray |
---|---|---|---|
0 | 0000 | 0011 | 0000 |
1 | 0001 | 0100 | 0001 |
2 | 0010 | 0101 | 0011 |
3 | 0011 | 0110 | 0010 |
4 | 0100 | 0111 | 0110 |
5 | 0101 | 1000 | 0111 |
6 | 0110 | 1001 | 0101 |
7 | 0111 | 1010 | 0100 |
8 | 1000 | 1011 | 1100 |
9 | 1001 | 1100 | 1101 |
Reference:
1) https://dsaint31.me/mkdocs_site/CE
2) https://www.geeksforgeeks.org/ieee-standard-754-floating-point-numbers/
3) https://woo-dev.tistory.com/92