Come è necessario impostare una variabile per il maggior numero possibile in C?
Domanda
Come si dovrebbe impostare una variabile uguale all'infinito (o qualsiasi valore più grande numero garantito) in C?
Soluzione
#include <limits.h>
int x = INT_MAX;
EDIT:. Risposto prima l'interrogante ha chiarito, stavo solo cercando di indovinare che tipo che volevano
Altri suggerimenti
C'è un file chiamato limits.h (almeno su Linux non c'è), che detiene questo tipo di definizione per esempio
/* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */
# define USHRT_MAX 65535
/* Minimum and maximum values a `signed int' can hold. */
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */
# define UINT_MAX 4294967295U
Di gran lunga il metodo più semplice per ottenere il valore più grande per un tipo intero senza segno vale a lanciare (-1) per quel tipo. Lo standard (§6.2.5 / 9) richiede che la matematica non firmato effettuata con modulo un numero maggiore di uno rispetto al massimo valore che può essere rappresentato, quindi per qualsiasi tipo T
senza segno, l'espressione ((T)-1)
sarà necessariamente il valore più grande possibile dal fatto che tipo.
Un altro modo comune di ottenere valore massimo di interi:
Intero senza segno
unsigned int uMax = (unsigned int)~0;
integer firmato
signed int iMax = (unsigned int)~0 >> 1;
Spiegazione
-
~0
-> impostare tutti i bit a uno -
>> 1
-> la cancellazione bit di segno, spostando tutti i bit a destra di una posizione -
(unsigned int)
typecasting unsigned int dopo bit inversione invece di utilizzare~0U
, perché C non ha un suffisso per brevi, letterali char (tutto inferiore rispetto int in generale)
Quindi, per il più grande valore char
possibile - basta cambiare nella formula typecasting a
unsigned char ed ecc.
Bonus - valore minimo di int firmato
semplicemente invertire tutti i bit ancora una volta nel massimo firmato int espressione:
signed int iMin = ~((unsigned int)~0 >> 1);
che imposta prima bit di segno a uno e il bit di riposo - a zero
In base alle vostre osservazioni, si desidera un unsigned int
(anche se si dice "numero intero senza segno", così forse si desidera un valore integrale, non necessariamente un unsigned int
).
In C, per tipo intero senza segno, il valore -1
, quando convertito in quel tipo, è garantito per essere il più grande valore di quel tipo:
size_t size_max = -1;
unsigned int uint_max = -1;
unsigned long ulong_max = -1;
assegnare valori SIZE_MAX
, UINT_MAX
e ULONG_MAX
alle variabili rispettivamente. In generale, si dovrebbe includere limits.h
e utilizzare la macro appropriata, ma è bello sapere che la regola di cui sopra. Inoltre, SIZE_MAX
non è in C89, così size_t size_max = -1;
lavorerà in C89 e C99.
Si noti che il comportamento di overflow è garantito solo per tipi integrali senza segno.
Dal momento che c'è un tag C ++ su questa questione, io suggerisco numeric_limits:
#include <limits>
unsigned x = std::numeric_limits<unsigned>::max();
In genere questo viene fatto 1.0/0.0
, ma si può ottenere una compilazione di avvertimento su questo. Io non sono a conoscenza di altri modi portatili di farlo in C89, C99, ma ha macro FP_INFINITE
in math.h
.
EDIT: A quanto pare. Sam in realtà non vogliono l'infinito, ma i limiti di numero intero, che si possono trovare in limits.h
come altri hanno detto
Io in genere uso il * macro _MAX
si trovano in limits.h
INT_MAX
per gli interi, ecc Questi sarà sempre impostato correttamente per il tipo di variabile. Anche i tipi di dimensioni in modo esplicito, come Uint32 avranno le voci corrispondenti in questo file di intestazione.
Questo ha il pregio di essere il più grande valore possibile che una variabile di questo tipo può contenere.
Per un intero senza segno, come lei ha chiesto nella sua interrogazione, si userebbe UINT_MAX
Credo che si consiglia di controllare questo link out:
http: // www. gnu.org/s/libc/manual/html_node/Infinity-and-NaN.html
L'ho fatto e funziona benissimo su gcc 4.4.1
#include "math.h"
int main(int argc, char**argv)
{
int x = INFINITY;
return 0;
}
- In primo luogo, includere un file di intestazione denominato come math.h
- Ora, equiparare INT_MAX al numero intero il cui valore si desidera impostare il massimo.
ESEMPIO:
#include<math.h> //the header file which need to be included// int a=INT_MAX; //Suppose "a" be that integer whose value you want largest//