Перейти к содержимому

Int max c что это

  • автор:

Пределы целых чисел в C и C++

Ограничения для целочисленных типов в C и C++ представлены в следующей таблице. Эти ограничения заданы в стандартном файле заголовка C . Стандартный файл заголовка C++ содержит , который включает в себя .

В Microsoft C также допускается объявление целочисленных переменных с указанием размера, которые относятся к целочисленным типам с размером 8, 16, 32 или 64 бит. Дополнительные сведения о них см. в статье Целочисленные типы с указанием размера.

Ограничения для целочисленных констант

Константа Значение Значение
CHAR_BIT Количество битов в наименьшей переменной, которая не является битовым полем. 8
SCHAR_MIN Минимальное значение для переменной типа signed char . –128
SCHAR_MAX Максимальное значение для переменной типа signed char . 127
UCHAR_MAX Максимальное значение для переменной типа unsigned char . 255 (0xff)
CHAR_MIN Минимальное значение для переменной типа char . –128 (или 0, если используется параметр /J)
CHAR_MAX Максимальное значение для переменной типа char . –127 (или 255, если используется параметр /J)
MB_LEN_MAX Максимальное число байтов в многобайтовом символе. 5
SHRT_MIN Минимальное значение для переменной типа short . -32768
SHRT_MAX Максимальное значение для переменной типа short . 32767
USHRT_MAX Максимальное значение для переменной типа unsigned short . 65 535 (0xffff)
INT_MIN Минимальное значение для переменной типа int . -2147483647 — 1
INT_MAX Максимальное значение для переменной типа int . 2147483647
UINT_MAX Максимальное значение для переменной типа unsigned int . 4 294 967 295 (0xffffffff)
LONG_MIN Минимальное значение для переменной типа long . -2147483647 — 1
LONG_MAX Максимальное значение для переменной типа long . 2147483647
ULONG_MAX Максимальное значение для переменной типа unsigned long . 4 294 967 295 (0xffffffff)
LLONG_MIN Минимальное значение для переменной типа long long . –9 223 372 036 854 775 807 – 1
LLONG_MAX Максимальное значение для переменной типа long long . 9 223 372 036 854 775 807
ULLONG_MAX Максимальное значение для переменной типа unsigned long long . 18 446 744 073 709 551 615 (0xffffffffffffffff)

Если значение превышает максимально возможное представление целочисленного типа, компилятор Microsoft выдает ошибку.

Завершение блока, относящегося только к системам Майкрософт

Использование INT_MAX и INT_MIN в C/C++

В этой статье мы рассмотрим использование INT_MAX и INT_MIN в C/C++.

На самом деле это полезные макросы, которые представляют максимальное и минимальное целочисленные значения.

Давайте посмотрим на это, используя несколько примеров.

Использование INT_MAX и INT_MIN

INT_MAX — это макрос, представляющий максимальное целочисленное значение. Точно так же INT_MIN представляет минимальное целочисленное значение.

#include INT_MAX INT_MIN 

Обратите внимание, что любая целочисленная переменная должна находиться между INT_MIN и INT_MAX. Обычно целые числа хранятся в виде 4 байтов (32 бита). Это означает, что почти на всех машинах максимальное целочисленное значение будет 2^(31) — 1=+2147483647. Минимальное целочисленное значение будет -(2^31)=-2147483648. Давайте проверим это для нашей машины.

#include #include int main()
Maximum Integer Value: 2147483647 Minimum Integer Value: -2147483648 

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

#include #include int main() < int value = 0; while (value >= 0) < // Check for overflow if (value == INT_MAX) < printf("value = %d. Possible overflow!\n", value); >value ++; > printf("Now, value = %d\n", value); value = 0; while (value value --; > printf("Now, value = %d\n", value); return 0; > 
value = 2147483647. Possible overflow! Now, value = -2147483648 value = -2147483648. Possible underflow! Now, value = 2147483647 

Хотя это занимает несколько секунд, это действительно делает то, что мы ожидаем. Целое число переполнится до INT_MIN и переполнится до INT_MAX . Это полезно для обнаружения таких скачков значений.

Зачем нужны эти макросы?

  • Чтобы избавить вас от необходимости запоминать фактические значения.
  • Используйте единые шаблоны программирования на всех компьютерах
  • Очень удобно использовать

Надеюсь, эти причины могут убедить вас использовать макросы такого рода всякий раз, когда вы создаете свою собственную библиотеку C/C++.

Заключение

В этой статье мы узнали об использовании макросов INT_MAX и INT_MIN в C/C++.

Для получения аналогичного контента просмотрите наш раздел учебника по программированию на C.

Рекомендации

  • страница cplusplus.com на climits

min(x,y)

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

Следующая программа иллюстрирует использование макросов max ( ) и min ( ) :
#include
#include
int main ( void )
{
printf ( «max of 10, 20 is %d \n » , max ( 10 , 20 ) ) ;
printf ( «min of 10, 20 is %d \n » , min ( 10 , 20 ) ) ;
return 0 ;
}

Функции и указатели в C++

В языке С++ присутствует возможность использовать функции, то есть логичекские структурные единицы кода, которые позволяют сделать код более читаемым и разделить функционал.

myFunction.cpp

Синтаксис функций можно описать следующим образом:

тип_возвращаемого_значения название_функции(аргументы_функции)  . код функции . > 

Пример функции, возвращающей наибольшее число из двух:

int max(int x, int y)  if (x > y) return x; else return y; > 

Вызов функции выглядит следующим образом:

int a = 150; int b = 980; int c = max(a, b) // Функция вернет значение 980 

Указатели

Попробуем реализовать функцию, которая принимает 3 integer переменных, сравнивает 2 из них и результат сравнения(наибольшее из чисел) записывает в третий аргумент.

madMax.cpp

Кажется логичным сделать подобную реализацию этой функции:

void max(int x, int y, int c)  if (x > y) c = x; else c = y; > 

Однако, мы можем убедиться в том, что следующий код, использующий нашу функцию сработает некорректно.

int a = 150; int b = 980; int c = 0; max(a, b, c) std::cout  c; // Печатает 0 а не 980. 

Что произошло? Все дело в том, что при вызове функции в ее аргументы были переданы всего лишь значения переменных a, b, c, которые равнялись соответственно 150, 980 и 0. Поэтому внутри функции были созданы переменные x, y, c в которых хранились эти значения, но эти переменные лежат совсем по другим адресам в оперативной памяти. Соответственно, изменение значений переменных внутри функций приводит к тому, что они изменяются не по тем адресам, в которых лежат переменные вызывающей стороны.

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

Тогда с учетом этого, функция max() должна быть модифицирована следующим образом:

void max(int x, int y, int* c)  if (x > y) *c = x; else *c = y; > 

Где int* — это тип аргумента, означающий адрес на переменную типа integer. Оператр * позволяет обратиться по адресу данной переменной и считать или записать значение.

Как же теперь вызывать эту функцию?

int a = 150; int b = 980; int c = 0; max(a, b, &c) std::cout  c; // Печатает 980 

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

Сайт построен с использованием Pelican. За основу оформления взята тема от Smashing Magazine. Исходные тексты программ, приведённые на этом сайте, распространяются под лицензией GPLv3, все остальные материалы сайта распространяются под лицензией CC-BY-SA.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *