максимальное значение int

Есть ли какой-либо код для нахождения максимального значения integer (в соответствии с компилятором) в C / C ++, например, функции Integer.MaxValue в java?

8 Solutions collect form web for “максимальное значение int”

В C ++:

 #include  

затем используйте

 int imin = std::numeric_limits::min(); // minimum value int imax = std::numeric_limits::max(); 

std::numeric_limits – это тип шаблона, который может быть создан другими типами:

 float fmin = std::numeric_limits::min(); // minimum positive value float fmax = std::numeric_limits::max(); 

В C:

 #include  

затем используйте

 int imin = INT_MIN; // minimum value int imax = INT_MAX; 

или

 #include  float fmin = FLT_MIN; // minimum positive value double dmin = DBL_MIN; // minimum positive value float fmax = FLT_MAX; double dmax = DBL_MAX; 

Я знаю, что это старый вопрос, но, возможно, кто-то может использовать это решение:

 int size = 0; // Fill all bits with zero (0) size = ~size; // Negate all bits, thus all bits are set to one (1) 

До сих пор мы имеем -1 как результат ‘, пока размер не будет подписан int.

 size = (unsigned int)size >> 1; // Shift the bits of size one position to the right. 

Как сказано в стандарте, биты, которые сдвинуты, равны 1, если переменная подписана и отрицательна, а 0, если переменная будет неподписанной или подписанной и положительной.

Поскольку размер подписан и отрицателен, мы будем сдвигать знаковый бит, который равен 1, что не очень помогает, поэтому мы применяем к unsigned int, вынуждая вместо этого сдвигаться в 0, устанавливая бит знака в 0, оставляя все остальные биты равными 1.

 cout < < size << endl; // Prints out size which is now set to maximum positive value. 

Мы могли бы также использовать маску и xor, но тогда нам нужно было знать точную битрейту переменной. При перемещении в битах фронт нам не нужно знать в любое время, сколько битов int на машине или компиляторе, и не нужно включать дополнительные библиотеки.

 #include  #include  using namespace std; int main() { cout < < INT_MAX << endl; } 

Почему бы не написать код, например:

 int max_neg = ~(1 < < 31); int all_ones = -1; int max_pos = all_ones & max_neg; 

Вот макрос, который я использую для получения максимального значения для целых чисел со знаком, который не зависит от размера используемого целочисленного типа со знаком и для которого gcc -Woverflow не будет жаловаться

 #define SIGNED_MAX(x) (~(-1 < < (sizeof(x) * 8 - 1))) int a = SIGNED_MAX(a); long b = SIGNED_MAX(b); char c = SIGNED_MAX(c); /* if char is signed for this target */ short d = SIGNED_MAX(d); long long e = SIGNED_MAX(e); 

Хорошо, я тоже не могу прокомментировать предыдущий ответ (Philippe De Muyter) и не поднять его счет, следовательно, новый пример с использованием его определения для SIGNED_MAX тривиально расширенного для неподписанных типов:

 // We can use it to define limits based on actual compiler built-in types also: #define INT_MAX SIGNED_MAX(int) // based on the above, we can extend it for unsigned types also: #define UNSIGNED_MAX(x) ( (SIGNED_MAX(x)< <1) | 1 ) // We reuse SIGNED_MAX #define UINT_MAX UNSIGNED_MAX(unsigned int) // on ARM: 4294967295 // then we can have: unsigned int width = UINT_MAX; 

В отличие от использования этого или этого заголовка, здесь мы используем реальный тип из компилятора.

Для конкретного максимального значения int я обычно пишу шестнадцатеричную нотацию:

 int my_max_int = 0x7fffffff; 

вместо нерегулярного десятичного значения:

 int my_max_int = 2147483647; 

Что относительно (1 < < (8*sizeof(int)-2)) - 1 + (1 << (8*sizeof(int)-2)) . Это то же самое, что и 2^(8*sizeof(int)-2) - 1 + 2^(8*sizeof(int)-2) .

Если sizeof(int) = 4 => 2^(8*4-2) - 1 + 2^(8*4-2) = 2^30 - 1 + 20^30 = (2^32)/2 - 1 [max signed int of 4 bytes] .

Вы не можете использовать 2*(1 < < (8*sizeof(int)-2)) - 1 потому что он будет переполняться, но (1 < < (8*sizeof(int)-2)) - 1 + (1 << (8*sizeof(int)-2)) работает.

Interesting Posts

Какое повреждение приведет к отключению, а не отключению?

Как узнать, загружается ли установщик Windows в EFI или BIOS?

Что мне нужно позаботиться при спячке и Ubuntu и Windows (среда с двойной загрузкой)

Как реализовать GCM Hello World для Android с помощью Android Studio

Эффективный способ удаления ВСЕХ пробелов из строки?

Коррумпированный MFT-раздел раздела NTFS. Какой инструмент прав? Какой инструмент исправить?

Почему невозможно, не пытаясь выполнить ввод-вывод, обнаружить, что TCP-сокет был изящно закрыт одноранговым узлом?

Самый простой способ создать Live Live CD

Как изменить цвет линии разделителя Android ListView?

Система, где 1 байт! = 8 бит?

Оптимизация с помощью компилятора Java

Обнаружение статуса двух SIM-карт в телефоне с двумя SIM-картами

DLL не может быть запущена для установщиков MSI

Сохраните все имена профилей WLAN, хранящиеся на моей машине, в текстовый файл

Почему я не могу подключиться к беспроводной сети на ubuntu, но Mac в порядке?

Давайте будем гением компьютера.