▼ 표 5-3 상수 타입의 예. 여기서는 signed와 unsigned를 32비트로 표현한다고 가정했다.
상수 x |
값 |
타입 |
-x의 값 |
2147483647 |
+2147483647 |
signed |
-2147483647 |
2147483648 |
+2147483648 |
signed long |
-2147483648 |
4294967295 |
+4294967295 |
signed long |
-4294967295 |
0x7FFFFFFF |
+2147483647 |
signed |
-2147483647 |
0x80000000 |
+2147483648 |
unsigned |
+2147483648 |
0xFFFFFFFF |
+4294967295 |
unsigned |
+1 |
1 |
+1 |
signed |
-1 |
1U |
+1 |
unsigned |
+4294967295 |
앞에서 설명했지만 여기서 0이 중요하다. 매우 중요하여 0, 0x0, '\0'과 같이 다양한 표현 방식을 지원한다. 세 가지 표현 모두 값은 같고 타입은 signed int다. 0에 대한 정수형 소수점 표현은 없다. 0.0이 0이란 값에 대한 소수점 표현이긴 하지만, 정수가 아닌 double 타입의 부동 소수점 값으로 취급한다.
TAKEAWAY 5.25 서로 다른 리터럴이 같은 값을 가질 수 있다.
이는 정수에 대해서는 당연한 말 같지만 부동 소수점 상수는 그렇지 않다. 부동 소수점 값은 텍스트로 표현된 근삿값일 뿐이다. 바이너리로 표현할 때 소수점 아래 자리를 버리거나 반올림하기 때문이다.