2013-08-18 7 views

ответ

18

Очевидный способ был бы использовать std::numeric_limits<unsigned long>::max();

7

Другим способом, чтобы выяснить, были бы:

unsigned long int i = (unsigned long int) -1; 
printf("%lu\n", i); 
+2

не работает на комплемент машине 1 в (где -0 будет максимальным) – TemplateRex

+3

@TemplateRex - '(unsigned long) -1' всегда является наибольшим значением, которое может быть представлено в' unsigned long'. Независимо от базового оборудования беззнаковая арифметика «должна подчиняться законам арифметики по модулю 2n, где n - количество бит в представлении значений этого конкретного размера целого числа». [Basic.fundamental]/4. –

+0

@PeteBecker, но, например, '(char) -1' в дополнении 1 будет 254, а' (char) -0' будет 255. Проблема не в арифметике по модулю, а в сопоставлении с подписью без знака. Что мне здесь не хватает? – TemplateRex

2

В простом способе:

unsigned long int i = -1; 
std::cout << i;