[시스템 프로그래밍] 정수(Integer)
2019. 11. 28. 14:23ㆍComputer Science/SystemProgramming
정수형의 표현
정수의 인코딩
- B2U(정수의 인코딩): Sigma[i=0~w-1]Xi*2^i
- B2T(부호의 정수- 2의 보수): Sigma[i=0~w-2]Xi2i -X(w-1)*2^(w-1)
- 2의 보수 방식에서느 MSB(Most Significant Bit => 맨마지막 비트)는. 부호를 나타낸다 0이면 양수, 1이면 음수
정수형의 표현
표현 가능한 정수의 범위
unsigned = 양수
signed = 음수/양수의 표현
비 부호형
- UMin = 0
- UMax = 2^w -1
2의 보수( 2's Complement values)
- TMin = -2^(w-1)
- TMax = 2^(w-1)-1
X | B2U | B2T |
---|---|---|
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 2 | 2 |
0011 | 3 | 3 |
... | ||
0111 | 7 | 7 |
1000 | 8 | -8 |
1001 | 9 | -7 |
1010 | 10 | -6 |
1011 | 11 | -5 |
... | ||
1111 | 15 | -1 |
데이터 타입 변환(casting)
비부호형에서 부호형으로의 캐스팅 혹은 반대의 경우 비트 패턴에 대한 변화는 전혀 없다. 다만 분류, 즉 계산법이 달라지는 차이가있다 위의 표에서 비부호형 1111 이 있는데, 여기서 부호형 캐스팅을 시전한다 했을때 비트 값은 여전히 1111이고 값만 -1일 뿐이다.
여기에는 한가지 법칙이 있는데 바로 부호형 음수값에 대해 비부호형 캐스팅을 시전할 시에 2^(그 자릿수) + 가지고 값을 한다는 것이다.
C언어에서 signed, unsigned 변환
디폴트 상태에서는 부호형(signed 변수임 숫자끝에 U를 붙이면 비부호형(unsigned)으로됨.
추가로 캐스팅에 대해서 부호형에서 비부호형으로 인자를 전달할 경우와 그 반대의 경우 양쪽다 implicit(묵시적) 캐스팅이 가능하다. 물론 명시적 캐스팅은 당연히 된다.
부호 확장 예제
decimal | hex | binary | |
x | 15213 | 3B 6D | 00111011 01101101 |
ix | 15213 | 00 00 3B 6D | 00000000 00000000 00111011 01101101 |
y | -15213 | C4 93 | 11000100 10010011 |
iy | -15213 | 00 00 C4 93 | 11111111 11111111 11000100 10010011 |
캐스팅 시에도 원래의 비트 패턴은 유지된다.
'Computer Science > SystemProgramming' 카테고리의 다른 글
[시스템프로그래밍] - 메모리(Memory 1) 1 (0) | 2019.11.26 |
---|---|
[시스템프로그래밍] - 시그널(Signal) (0) | 2019.11.20 |