Mesteparten av tiden, i konkurrerende programmering, er det behov for å tildele variabelen, maksimums- eller minimumsverdien som datatypen kan inneholde, men å huske et så stort og presist tall viser seg å være en vanskelig jobb. Derfor har C/C++ visse makroer for å representere disse tallene, slik at disse kan tilordnes direkte til variabelen uten egentlig å skrive inn hele tallet.
C/C++ gir to slike makroer, nemlig INT_MAX og INT_MIN som representerer heltallsgrensene. Avhengig av kompilatoren og C++-standarden, kan det hende du må inkludere header-filen eller i henholdsvis C- eller C++-kildekoden. Så det er tilrådelig å inkludere denne overskriftsfilen for bruk av makroene INT_MAX og INT_MIN. For ytterligere lesing om denne overskriftsfilen, referer til denne artikkelen .
INT_MAX i C/C++
INT_MAX er en makro som spesifiserer at en heltallsvariabel ikke kan lagre noen verdi utover denne grensen. Den representerer maksimal verdi av øvre grense av heltallsdatatypen i C/C++.
Verdien av INT_MAX er:
sett inn vannmerke i word
- INT_MAX = 2147483647 (for 32-bits heltall)
- INT_MAX = 9.223.372.036.854.775.807 (for 64-bits heltall)
INT_MIN i C/C++
INT_MIN er en makro som spesifiserer at en heltallsvariabel ikke kan lagre noen verdi under denne grensen. Den representerer minimumsverdi eller nedre grense av heltallsdatatypen.
Verdien av INT_MIN er:
- INT_MIN = – 2147483648 (for 32-bits heltall)
- INT_MIN = – 9 223 372 036 854 775 808 (for 64-bits heltall)
Merk: Verdiene for INT_MAX og INT_MIN kan variere fra kompilator til kompilator. Følgende er typiske verdier i en kompilator der heltall lagres ved bruk av 32 biter.
mvc for java
Eksempel på INT_MIN og 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); }> Produksjon
2147483647 -2147483648>
Applikasjoner av INT_MAX og INT_MIN
Følgende er hovedapplikasjonene for INT_MAX og INT_MIN
1. Se etter heltallsoverløp
Vi kan bruke makroene INT_MIN og INT_MAX for å se etter det signerte heltallsoverløpet. Eksemplet nedenfor viser hvordan du gjør det.
Eksempel
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 - tall2) returner -1; // Ingen overløp skjedde ellers returner num1 + num2; } // Driverkode int main() { // Summen av disse tallene vil være lik INT_MAX // Hvis noen av dem økes med 1, vil overløp // forekomme int num1 = 2147483627; int num2 = 20; // Resultatet er -1 hvis overløp oppstod // Lagrer summen, ellers int resultat = check_overflow(tall1, tall2); // Overløp skjedde hvis (resultat == -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 - tall2) returner -1; // Ingen overløp skjedde ellers returner num1 + num2; } int main(void) { // Summen av disse tallene vil tilsvare // INT_MAX Hvis noen av dem økes med 1, vil overløp // forekomme int num1 = 2147483627; int num2 = 20; // Resultatet er -1 hvis overløp oppstod // Lagrer summen, ellers int resultat = check_overflow(tall1, tall2); // Overløp oppstod hvis (resultat == -1) printf('Heltallsoverløp skjedde'); // Ingen overløp ellers printf('%d', resultat); returner 0; } // Denne koden er bidratt av sarajadhav12052009> Produksjon
2147483647>
På samme måte kan vi se etter overløp mens vi trekker fra 2 tall ved å bruke INT_MIN.
2. Beregning av MIN i en matrise med store elementer
Vi tildeler vanligvis en høy verdi til MIN for å beregne minimumsverdien i en matrise. Men hvis en matrise har store elementer, må vi tildele den høyest mulige verdien til matrisen.
Nedenfor er implementeringen:
Eksempel
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); }> Produksjon
2019403813>
På samme måte kan MAX finnes i en rekke store tall ved å bruke INT_MIN.
Vanlige spørsmål på INT_MIN og INT_MAX
1. Hvorfor gir ikke abs(INT_MIN) det forventede resultatet?
Har du noen gang møtt et problem når du kanskje har brukt abs()-funksjonen? Mest sannsynlig NEI hvis du ikke har løst noe problem som krever en absolutt funksjon. Men hvis du har løst problemer på techcodeview.com eller Leetcode så vet du at det alltid er ett testtilfelle hvor du feiler og det testtilfellet er når du har verdien som INT_MIN.
La oss se hva som skjer hvis vi bruker den absolutte funksjonen, den returnerer mod-verdien, noe som betyr at den returnerer følgende verdi:
lister i java

Modulverdier
En annen ting vi vet er at området for heltall er fra -2.147.483.648 til 2.147.483.647, eller vi kan si at det er fra -2 31 til 2 31 - 1 slik vi kan se at det er det alltid en mer på den negative siden enn den positive
gjennomstrekning
La oss nå se hva som skjer når vi prøver å ta absolutte verdier av resultatet:
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; }> Produksjon
Value of INT_MIN is: -2147483648 Value of abs(INT_MIN) is: -2147483648>
Nå kan vi observere at abs(INT_MIN) er INT_MIN i seg selv, og dette fører til at mange feil oppstår når vi gir online vurderinger eller løser problemer.
Grunnen til
Hvis vi nå kommer til årsaksdelen kan vi se at vi for øyeblikket har å gjøre med heltallsdelen og abs(heltall) returnerer en heltallsverdi i seg selv, så å flytte ved siden av representasjonen INT_MIN kan representeres som
INT_MIN = -2147483648 = 10000000000000000000000000000000>
Her representerer 1. bit fortegnsbiten som er satt til én, noe som betyr at det er et negativt tall, og den neste delen er en 31-bits binær representasjon for 2147483648.
Hvis vi nå prøver å ta den absolutte verdien av INT_MIN vil den prøve å gi oss +2147483648, og denne verdien kan ikke representeres i heltallsformen, da den maksimale verdien som kan representeres er +2147483647, da vi på den positive siden må representerer 231 heltall, men 0 er også inkludert, så området fra 1 til 2147483648 endres til 0 til 2147483647 og av denne grunn kan ikke abs(INT_MIN) representeres i dette området og svaret som returneres er det samme som INT_MIN.
Løsning
Vel, det kan være mange løsninger på problemet, men noen av de beste løsningene er:
- Bruk alltid en spesiell kantkasse for å sjekke if(x == INT_MIN) hvis du bruker abs(x) og håndter denne saken deretter.
- Prøv å bruke Long i stedet for INTEGER, men husk at LONG_MIN også vil gi samme resultat, så vær forsiktig.