Какой самый большой тип данных для хранения (и печати) целого числа? - PullRequest
7 голосов
/ 10 января 2012

В C в 32-битной системе, какой тип данных будет хранить (и поэтому может печатать) наибольшее целое число? Это long long или unsigned long? Есть ли unsigned long long? А какой самый точный и политкорректный?

Ответы [ 4 ]

10 голосов
/ 10 января 2012

Ваш вопрос немного неясен, но intmax_t - это самый большой целочисленный тип со знаком (а uintmax_t - это самый большой целочисленный тип без знака).Это определения типов, определенные в <stdint.h>, но если вы их печатаете, вам нужно вместо этого <inttypes.h> и макросы PRInMAX для различных значений n .

2 голосов
/ 10 апреля 2014

Не оглядываясь вокруг куста, я хотел бы сказать, что иногда не в реальной практике кодирования, да, конечно, в некоторых соревнованиях могут понадобиться очень большие типы данных, но я думаю, что мы можем сделать это. Почему бы не взять всю последовательность в виде строки, а затем использовать функцию atoi, чтобы получить целочисленное значение, которое я считаю политически корректным :: :)

#include<stdio.h>
#include<stdlib.h>

int main ()
{
    int i;
    char bigString [256];

    printf ("Enter a number: ");
    fgets (bigString, 256, stdin);

    i = atoi (bigString);
    printf ("The value entered is %d.",i);

    return 0;
}
1 голос
/ 10 января 2012

В ISO C99 long long по крайней мере 64 бита, который является самым большим стандартным целочисленным типом данных.Это также приходит как unsigned long long.По-видимому, ваш компилятор может предоставлять более крупные типы, определяемые intmax_t и uintmax_t.

Однако, основываясь на ваших комментариях, вы можете искать библиотеку bigint, такую ​​как GMP .Он допускает произвольные длинные целые числа (и числа с плавающей запятой), ограниченные по длине только вашими системными ресурсами.

0 голосов
/ 10 января 2012

Тип данных с самой длинной напечатанной строкой является типом данных со знаком, если только у вас нет целочисленного типа с максимальным значением без знака, которое на одну цифру длиннее максимального значения со знаком.

Например, 4-разрядное целое число без знака будет содержать не более двух символов без знака или один знак плюс знак минуса при подписании.

Итак, вы должны выбрать тип данных со знаком, чтобы представить наибольшую напечатанную строку. Который должен быть long long.

...