logo

INT_MAX und INT_MIN in C/C++ und Anwendungen

Meistens besteht bei der Wettbewerbsprogrammierung die Notwendigkeit, der Variablen den maximalen oder minimalen Wert zuzuweisen, den der Datentyp enthalten kann. Es erweist sich jedoch als schwierig, sich eine so große und präzise Zahl zu merken. Daher verfügt C/C++ über bestimmte Makros zur Darstellung dieser Zahlen, sodass diese direkt der Variablen zugewiesen werden können, ohne dass tatsächlich die ganze Zahl eingegeben werden muss.

C/C++ bietet zwei solcher Makros, nämlich INT_MAX und INT_MIN, die die Ganzzahlgrenzen darstellen. Abhängig vom Compiler und C++-Standard müssen Sie möglicherweise die Header-Datei einschließen oder in Ihrem C- bzw. C++-Quellcode. Daher ist es ratsam, diese Header-Datei für die Verwendung der Makros INT_MAX und INT_MIN einzubinden. Weitere Informationen zu dieser Header-Datei finden Sie hier: siehe diesen Artikel .



INT_MAX in C/C++

INT_MAX ist ein Makro, das angibt, dass eine Ganzzahlvariable keinen Wert über diesem Grenzwert hinaus speichern kann. Es repräsentiert die Maximalwert der Obergrenze des Integer-Datentyps in C/C++.

Der Wert von INT_MAX ist:

Namen von Städten in den USA
  • INT_MAX = 2147483647 (für 32-Bit-Ganzzahlen)
  • INT_MAX = 9.223.372.036.854.775.807 (für 64-Bit-Ganzzahlen)

INT_MIN in C/C++

INT_MIN ist ein Makro, das angibt, dass eine Ganzzahlvariable keinen Wert unterhalb dieser Grenze speichern kann. Es repräsentiert die Mindestwert oder die untere Grenze vom Datentyp Integer.



Der Wert von INT_MIN ist:

  • INT_MIN = – 2147483648 (für 32-Bit-Ganzzahlen)
  • INT_MIN = – 9.223.372.036.854.775.808 (für 64-Bit-Ganzzahlen)

Notiz: Die Werte von INT_MAX und INT_MIN können von Compiler zu Compiler variieren. Im Folgenden sind typische Werte in einem Compiler aufgeführt, bei dem Ganzzahlen mit 32 Bit gespeichert werden.

Beispiel für INT_MIN und INT_MAX

C++
// C++ program to print values of INT_MAX // and INT_MIN #include  #include  using namespace std; int main() {  cout << INT_MAX << endl;  cout << INT_MIN;  return 0; }>
C
// C program to print values of INT_MAX // and INT_MIN // we have to include limits.h for results in C #include  #include  int main() {  printf('%d
', INT_MAX);  printf('%d', INT_MIN); }>

Ausgabe
2147483647 -2147483648>

Anwendungen von INT_MAX und INT_MIN

Im Folgenden sind die Hauptanwendungen von INT_MAX und INT_MIN aufgeführt



1. Auf Ganzzahlüberlauf prüfen

Wir können die Makros INT_MIN und INT_MAX verwenden, um den vorzeichenbehafteten Ganzzahlüberlauf zu überprüfen. Das folgende Beispiel zeigt, wie es geht.

Madhubala

Beispiel

C++
// C++ code to check for Integer overflow while // adding 2 numbers #include  #include  using namespace std; // Function to return integer sum after checking overflow int check_overflow(int num1, int num2) {  // Checking if addition will cause overflow  if (num1>INT_MAX - num2) return -1;  // Es ist kein Überlauf aufgetreten, sonst return num1 + num2; } // Treibercode int main() { // Die Summe dieser Zahlen ergibt INT_MAX // Wenn eine von ihnen um 1 erhöht wird, kommt es zu einem Überlauf // int num1 = 2147483627;  int num2 = 20;  // Ergebnis ist -1, wenn ein Überlauf aufgetreten ist // Speichert die Summe, sonst int result = check_overflow(num1, num2);  // Überlauf aufgetreten if (result == -1) cout<< 'Integer overflow occurred';  // No overflow  else  cout << result;  return 0; }>
C
// C code to check for Integer overflow while // adding 2 numbers #include  #include  // Function to check integer overflow int check_overflow(int num1, int num2) {  // Checking if addition will cause overflow  if (num1>INT_MAX - num2) return -1;  // Es ist kein Überlauf aufgetreten, sonst return num1 + num2; } int main(void) { // Die Summe dieser Zahlen entspricht // INT_MAX Wenn eine von ihnen um 1 erhöht wird, kommt es zu einem Überlauf // int num1 = 2147483627;  int num2 = 20;  // Ergebnis ist -1, wenn ein Überlauf aufgetreten ist // Speichert die Summe, sonst int result = check_overflow(num1, num2);  // Überlauf aufgetreten if (result == -1) printf('Ganzzahliger Überlauf aufgetreten');  // Kein Überlauf else printf('%d', result);  0 zurückgeben; } // Dieser Code wurde von sarajadhav12052009>'> beigesteuert  
Ausgabe
2147483647>

Ebenso können wir mit INT_MIN beim Subtrahieren zweier Zahlen auf Überlauf prüfen.

2. Berechnen von MIN in einem Array mit großen Elementen

Normalerweise weisen wir MIN einen hohen Wert zu, um den Mindestwert in einem Array zu berechnen. Wenn ein Array jedoch große Elemente enthält, müssen wir dem Array den höchstmöglichen Wert zuweisen.

Unten ist die Implementierung:

Beispiel

chown-Befehl
C++
// C++ code to compute MIN element #include  #include  using namespace std; // Function to compute minimum element in array int compute_min(int arr[], int n) {  // Assigning highest value  int MIN = INT_MAX;  // Traversing and updating MIN  for (int i = 0; i < n; i++)  MIN = std::min(MIN, arr[i]);  // Printing MIN element  cout << MIN; } // Driver code int main() {  // array with MIN to compute  int arr[] = { 2019403813, 2147389580, 2145837140,  2108938594, 2112076334 };  // size of array  int n = sizeof(arr) / sizeof(arr[0]);  // Function call to compute MIN  compute_min(arr, n); }>

Ausgabe Ebenso kann MAX mit INT_MIN in einem Array großer Zahlen gefunden werden.

FAQs zu INT_MIN und INT_MAX

1. Warum liefert abs(INT_MIN) nicht das erwartete Ergebnis?

Hatten Sie jemals ein Problem, als Sie möglicherweise die Funktion abs() verwendet haben? Höchstwahrscheinlich NEIN, wenn Sie kein Problem gelöst haben, das eine absolute Funktion erfordert. Wenn Sie jedoch Probleme auf techcodeview.com oder Leetcode gelöst haben, wissen Sie, dass es immer einen Testfall gibt, bei dem Sie scheitern, und zwar dann, wenn Sie den Wert INT_MIN haben.

Mal sehen, was passiert, wenn wir die absolute Funktion verwenden. Sie gibt den Mod-Wert zurück, was bedeutet, dass sie den folgenden Wert zurückgibt:

Modulwerte

Nun wissen wir auch, dass der Bereich einer Ganzzahl von -2.147.483.648 bis 2.147.483.647 reicht, oder wir können sagen, dass er von kommt -2 31 zu 2 31 - 1 damit wir sehen können, dass es so ist immer eins mehr auf der negativen als auf der positiven Seite

Sehen wir uns nun an, was passiert, wenn wir versuchen, absolute Werte des Ergebnisses zu ermitteln:

Java-Designmuster
C++
// C++ program to demonstrate the common error faced when // getting absolute value of the INT_MIN #include  #include  using namespace std; int main() {  cout << 'Value Of INT_MIN is : ' << INT_MIN << endl;  cout << 'Value Of abs(INT_MIN) is : ' << abs(INT_MIN)  << endl;  return 0; }>
C
// C program to demonstrate the common error faced when // getting absolute value of the INT_MIN #include  #include  #include  int main() {  printf('Value of INT_MIN is: %d
', INT_MIN);  printf('Value of abs(INT_MIN) is: %d', abs(INT_MIN));  return 0; }>

Ausgabe
Value of INT_MIN is: -2147483648 Value of abs(INT_MIN) is: -2147483648>

Jetzt können wir beobachten, dass abs(INT_MIN) INT_MIN selbst ist, und dies führt dazu, dass viele Fehler auftreten, wenn wir Online-Bewertungen abgeben oder ein Problem lösen.

Grund

Wenn wir nun zum Grundteil kommen, können wir sehen, dass wir uns derzeit mit dem Ganzzahlteil befassen und abs(integer) selbst einen ganzzahligen Wert zurückgibt, sodass der Übergang zur Darstellung INT_MIN als dargestellt werden kann

INT_MIN = -2147483648 = 10000000000000000000000000000000>

Hier stellt das 1. Bit das Vorzeichenbit dar, das auf eins gesetzt ist, was bedeutet, dass es eine negative Zahl ist, und der nächste Teil ist eine 31-Bit-Binärdarstellung für 2147483648.

Wenn wir nun versuchen, den absoluten Wert von INT_MIN zu nehmen, wird versucht, uns +2147483648 zu geben, und dieser Wert kann nicht in der Ganzzahlform dargestellt werden, da der maximal darstellbare Wert +2147483647 ist, da wir dies auf der positiven Seite tun müssen stellen 231 ganze Zahlen dar, aber 0 ist ebenfalls enthalten, sodass sich der Bereich von 1 bis 2147483648 in 0 bis 2147483647 ändert. Aus diesem Grund kann abs(INT_MIN) in diesem Bereich nicht dargestellt werden und die zurückgegebene Antwort ist dieselbe wie INT_MIN.

Lösung

Nun, es gibt möglicherweise viele Lösungen für das Problem, aber einige der besten Lösungen sind:

  1. Verwenden Sie immer einen speziellen Randfall zur Prüfung von if(x == INT_MIN), wenn Sie abs(x) verwenden, und behandeln Sie diesen Fall entsprechend.
  2. Versuchen Sie, Long anstelle von INTEGER zu verwenden, aber denken Sie daran, dass LONG_MIN ebenfalls zum gleichen Ergebnis führt. Seien Sie also vorsichtig.