C언어에서 자료형에 대해서 알아봅시다.
C언어의 자료형은 아래와 같은 종류들이 있습니다.
보시면 여러가지가 있고 범위도 다양하게 있어서 이걸 전부다 외워야 된다고 생각하시면 안됩니다.
주로 많이 사용하는 char, int의 크기가 몇 byte인것만 알고 가시면 되겠습니다~!
정수의 범위는 어떻게 주어지는 걸까요?
unsigned char형의 예시를 들어보겠습니다.
unsigned char형은 char에서 음수가 존재하지 않는 자료형입니다.
아래 그림은 bit 단위로 표시한 내용입니다.
1 bytes = 8 bit 입니다. 그래서 1byte를 아래와 같이 0번부터 7번까지 총 8개의 bit로 표시한 내용입니다.
bit는 1 또는 0 밖에 표시할 수 없는 상태 입니다. 즉 unsigned char형의 가장 큰 값은
2진수 1111 1111 입니다.
각각의 비트는 2^7~ 2^0을 표시합니다. 결국 2진수 1111 1111 = 10진수 255가 됩니다.
즉 unsigned char형은 0~255까지 표시가 가능합니다.
그렇다면,
char형은 어떻게 다를까요?
최상위 비트인 7번 비트가 부호를 나타내는 비트가 됩니다.
최상위 비트 7번이 1이면 마이너스를 뜻합니다.
char형에서 가장 큰 수는 위와 같습니다.
0~6번 비트까지 1인 0111 1111 입니다. = 10진수로 128이 됩니다.
그러면 최상위 비트 7번이 부호를 나타낸다고 했으니, 가장 작은 -128은 1111 1111이 되는 걸까요?
정답은...
아닙니다.
최상위 비트가 1인 음수를 확인하는 과정은 위와 같습니다.
첫번째로 최상위 비트가 1이라면, 모든 비트를 뒤집어 줍니다.
만약 값이 0이라면 → 1으로, 1이라면 → 0으로 바꿔줍니다.
두번째로 +1을 해줍니다.
그러면 그 결과 값에 -를 붙여주면 결과값이 됩니다.
즉 char형의 1111 1111(2) 의 경우는 -1이라는 결과가 됩니다.
이렇게 변환하는 과정을 "1의 보수" 라고 합니다.
이렇게 복잡하게 변환하게 된 이유는 연산을 해보면 알 수 있습니다.
-1 + 1 = 0이 되지요?
이걸 2진수로 표시해보시면,
1111 1111(2) + 0000 0001(2) = 0000 0000(2) 가 됩니다.
7번 비트 위에 8번 비트는 무시하시면 됩니다. char형이 담을 수 있는 범위가 아니니깐요.
그러면 가장 작은 -128을 2진수로 표시한 내용은 어떻게 될까요?
128을 "1의 보수"에 적용을 하시면 -128이 됩니다.
확인 해보실까요?
우선 +128에서 부터 시작하시면 됩니다.
+128 = 0111 1111(2)
0,1을 뒤집으면 = 1000 0000(2)
+1을 해주면 = 1000 0001(2) 가 됩니다.
즉 -128 = 1000 0001(2) 가 됩니다.
-128의 1의 보수는 128이 나오는지 다시 확인을 해보죠.
위와 값이 1의 보수 마지막 결과가 0111 1111(2)가 나오는 것을 확인하실 수 있습니다.
여기까지 정수 부분 확인하는 과정을 알아봤습니다.
마지막 남은 실수는 표시하는 방법이 좀더 복잡하긴 합니다. 부동소수점 규약을 참고하시면 되는데... 솔직히 이 부분까진 알 필요는 없다고 생각합니다.
(사실 저도 1~2번 들어본 적은 있으나, 암기는 안하고 있습니다. 정보처리기사 시험때 확인해본 기억이 있네요.)
임베디드 개발자라면 더더욱 그렇습니다.
임베디드 개발환경에서는 실수, float, double형이 지원되지 않는 경우가 대부분이거든요.
C언어 코딩은 한 줄도 없었지만, 여기 내용은 개발자라면 기본적으로 숙지는 해두고 시작하셔야 됩니다. 생각보다 데이터 크기에 대해서 고려 없이 했다가 의도와 다르게 동작하는 경우가 종종 있거든요.
'IT > C언어' 카테고리의 다른 글
[비와이][C언어] 연산자에 대해서 알아보자 - 2(할당, 삼항, 비트) (0) | 2021.06.27 |
---|---|
[비와이][C언어] 연산자에 대해서 알아보자 - 1 (0) | 2021.06.26 |
[비와이][C언어] 03 - 변수와 상수 (0) | 2021.06.24 |
[비와이][C언어] 02 - printf와 형식 지정자 (0) | 2021.06.22 |
00 - Visual Studio Community 2019 설치, Hello World 출력 (0) | 2021.06.11 |
댓글