※ 컴퓨터에서의 데이터 표현

컴퓨터 내부 (memory, register)에 데이터가 표현되는 방식을 이해하는 것은 정말 중요!

- 바이트 저장순서(Byte Ordering)

- program의 소스코드와 실행코드

- 정수의 type casting과 연산

 

 

※ 1 Byte = 8 bits 이다!

32-bit 운영체제 컴퓨터의 주소범위는 2^32 즉, 4GB인데, 요즘 사용되는 64-bit는 가용 주소공간이 약 1.8*10^19 Byte정도.

cf. x86-64 컴퓨터는 48-bit주소를 지원하는데, 이는 256TB정도이다.

 

 

 

※ Byte Ordering (바이트 저장순서)

크게 2가지가 있는데, 다음과 같다.

1. Big Endian: Least significant byte (최하위 byte)가 최대주소에 저장된다.

2. Little Endian: Least significant byte (최하위 byte)가 최소주소에 저장된다.

 

예를들어, 0x01234567의 경우, 7이 최하위 bit로 각각의 0, 1, 2, 3, 4, 5, 6, 7은 4-bit크기를 갖는데, 

아래의 주소 한칸은 1byte(=8-bits)이므로 2개의 숫자값이 들어가는 것을 알 수 있다.

 

 

※ 비트 연산자

메모리에 할당된 정수값을 bit단위로 논리연산을 실행하기 위해 사용한다.

 

※ shift 연산

Left Shift  [x << y]: x를 y만큼 왼쪽으로 shift

 

Right Shift  [x >> y]: x를 y만큼 오른쪽으로 shift

- 논리 shift [Log. >>]: 밀어낸 후 값을 0으로 채움

- 산술 shift [Arith. >>]: 밀어낸 후 값을 원래값의 처음숫자로 채움

 

 

 

 

 

※ 정수의 표현방법

- unsigned int

- BCD code: 4-bits로 십진수 0~9를 표시 (2351 => 0010 0011 0101 0001)

- MSB에 의한 부호표시: (-22 => 110110, 이때 맨 앞자리 1은 부호를 의미, 1은 음수, 0은 양수)

- 부호를 갖는 signed int

 

컴퓨터에서는 2의 보수로 부호형 정수를 표시!

- 0을 1로 바꾸고 1을 0으로 바꾸는 shifting을 진행, 그 후 가장 마지막 자리에 1을 더하면 된다.

 

이를 통해 양수부분에 있어서는 signed와 unsigned의 표현은 동일하다.

 

 

 

※ Data type casting 

C언어에서는 signed로부터 unsigned로의 변환을 허용한다. (다만 아래와 같은 이유로 인해 주의해서 사용해야 한다.)

 

§  C언어에서 signed와 unsigned의 변환

- 상수는 아무런 명시가 없으면 signed integer이다.

- 명시적으로 U를 숫자 끝에 붙이면 "수식 전체"Unsigned이다!

 

 

가장 중요한 점은 signed => unsigned로 바꾸면 음수가 엄청 큰 양수로 바뀔 수 있다는 점을 유의해야 한다!

 

 

 

 

 

 

 

+ Recent posts