2012-03-17 4 views
0

K & R C 책에서 연습 문제를 해결하면서 나는 운동 2.1을 마주 쳤습니다.UINT_MAX C의 ULONG_MAX와 동일

은 우선은 내가 -1UINT_MAX로 가지고,하지만 난 %u 자리 표시자를 사용하지만, 지금은 ULONG_MAX으로 나에게 같은 수를 나타내는. 부록 B에 책에서

, 그들은 UINT_MAX65535ULONG_MAX4294967295을해야해야한다고 말하지만, 운동을 실행할 때, 그는 UINT_MAX4294967295ULONG_MAX 모두 나에게주는.

왜 그럴까요?

+1

Mac OS X 64 비트 응용 프로그램의 경우 'ULONG_MAX'= 'ULONGLONG_MAX'및 'ULONG_MAX' ≠'UINT_MAX'입니다. 특히'UINT_MAX = 4294967295','ULONG_MAX = 18446744073709551615' 및'ULONG_LONG_MAX = 18446744073709551615' – bobobobo

답변

5

우선 unsigned long을 인쇄하는 올바른 방법은 %u이 아니라 %lu입니다. 둘째, 표준 값이 UINT_MAX 65535입니다 말합니다. 그것은 (그리고 일반적으로) 큰 수 있습니다. 정수형

그들의 구현 드 인터넷 NED 값의

5.2.4.2.1 크기는 동일하거나 또는 동일한 기호로 도시 된 것들에 크기 (절대 값)에서 더 클 것이다.

+0

오, 봐요. 최소 크기를 보지 못했습니다. 감사합니다 : D –

1

32 비트 플랫폼에서 intlong은 일반적으로 동일하므로 최대 값도 동일합니다. 물론 서명되지 않은 대응 자에 대해서도 마찬가지입니다.

0

부록이 잘못되었습니다. 유일한 보장은 sizeof (long)> sizeof (int)> = sizeof (char)가 평등의 가능성에 주목한다는 것입니다.