티스토리 뷰

< 자료형 - 1 >

 

자료형이란, 

" 일정 길이의 메모리 속에 저장된 정보(자료)를 해석하는 방법 "

 

자료(정보) => 수(숫자)

컴퓨터는 '전자식 계산기'이므로 0과 1로 밖에 인식하지 못함.

 

메모리는 주소를 갖고 있고 주소는 16진수로써 표시됨.

변수는 메모리를 갖고 메모리는 주소를 가지며 변수는 이름을 할당받음.

 

 

또한, 상수의 상태는 부호가 있는 것과 없는 것으로 나눌 수 있는데.

이에 대해, c언어는 signedunsigned 로 구분 할 수 있다.

 

int a = 10;
unsigned int b = 10U;

signed는 생략한다.

 

signed 형은 부호가 있고, unsigned 형은 부호가 없다.

signed와 unsigned의 정확한 구분과 사용이유를 인터넷을 통해 알아보았는데,

가장 많은 이유로는 기본적으로 char 자료형이 8bit의 길이로 되어있어서

 

 

(signed) char 사용시,

양의 최대값는 0111 1111(2진수) = +127이 됩니다.
음의 최대값은 1111 1111(2진수) = -127이 됩니다.

 

unsigned char 는 0~255 까지 표현됩니다.
첫번째 비트를 양수, 음수로 표현하지 않고 그냥 값으로 처리합니다.

 

최소값 0000 0000(2진수) = 0
최대값 1111 1111(2진수) = 255

 

 

구글링 통해 찾은 둘의 또 하나의 차이점은,

정수값은 같지만, 비트값은 다르다.

 

unsigned char c = 0x80;
printf("%u\n", c);
printf("%d\n", c);

--------------

128

128

--------------

%u 는 인자를 unsigned int 값으로 표현하는 포맷입니다.

인자 c 는 unsigned char 이고 출력 포멧은 unsigned int여서 묵시적 형변환이 진행됩니다.

둘 다 부호가 없는 표현이므로 묵시적 형변환이 진행될 때 늘어나는 메모리 값은 0으로 채워집니다.

0000 0000 0000 0000 0000 0000 1000 0000 으로 형변환됩니다.

부호없는 10진수로 128이므로 128 출력

 

두번째 출력값의 이유도 위와 비슷.

 

char c = 0x80;
printf("%u\n", c);
printf("%d\n", c);

-------------

4294967168

-128

-------------

%u 는 인자를 unsigned int 값으로 표현하는 포맷입니다.

(signed) char 는 부호가 있는 표현인데 최상위 비트가 1이면 음수입니다. 0x80 은 1000 0000 으로 음수입니다.

묵시적 형변환이 일어날 때 늘어나는 메모리의 값은 부호비트로 채워집니다.

1111 1111 1111 1111 1111 1111 1000 0000 으로 형변환됩니다.

%u 는 unsigend int 값을 출력하는 포맷이므로 위에 값을 부호 없는 10진수로 표현시 저러한 값을 출력합니다.

 

%d 는 인자를 int값으로 표현하는 포맷입니다.

(signed) char 는 부호가 있는 표현인데 최상위 비트가 1이면 음수입니다. 0x80 은 1000 0000 으로 음수입니다.

묵시적 형변환이 일어날 때 늘어나는 메모리의 값은 부호비트로 채워집니다.

1111 1111 1111 1111 1111 1111 1000 0000 으로 형변환됩니다.

따라서 부호있는 10진수로 -128이므로 출력값은 -128입니다.

 

 

그 밖에 퍼온 글

*************

임베디드 프로그래밍에서는 엄청난 위력을 지닌(?) 폭탄이 될 수 있다

 

char buf; 를 선언하고 RS-232 등의 통신을 위해 한 바이트식 전송을 하려고 할때

buf에 들어가는 값이 0xA0 부터 즉, sign bit 가 1이 되는 시점부터 그 값을 잘못 읽어 sizeof(char) = 1 임에도 불구하고

0xFFFFFFA0 가 되어 실제로 전송되는 값은 FF가 되는 문제가 발생을 할 수 도 있다.

 

컴파일러의 문제인지,  CPU의 특성인지, 아니면 C언어의 문제인지는 확실하지 않지만

 

[출처] 데이터는 unsigned char 로!   |   작성자 구차니 

*************

 

 

플러스 계산 밖에 하지 못하는 컴퓨터를 위해 내놓은 방법은 보수를 이용하는 계산법이다.

보수 계산법은 인터넷을 이용하자...

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함