[시스템 프로그래밍] 정수(Integer)

2019. 11. 28. 14:23Computer 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

 

Signed 와 unsigned의 비교
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

캐스팅 시에도 원래의 비트 패턴은 유지된다.