ti-enxame.com

valor máximo de inteiro

Em C, o inteiro (para máquinas de 32 bits) é de 32 bits e varia de -32.768 a +32.767. Em Java, o inteiro também é de 32 bits, mas varia de -2.147.483.648 a +2.147.483.647.

Eu não entendo como o intervalo é diferente em Java, mesmo que o número de bits seja o mesmo. Alguém pode explicar isso?

242
stackuser

In C, a própria linguagem não determina a representação de certos tipos de dados. Pode variar de máquina para máquina, em sistemas embarcados o int pode ter 16 bits de largura, embora normalmente seja de 32 bits.

O único requisito é que short int <= int <= long int por tamanho. Além disso, há uma recomendação de queint deve representar a capacidade nativa do processador .

Todos os tipos são assinados. O modificador unsigned permite que você use o bit mais alto como parte do valor (caso contrário, ele é reservado para o bit de sinal).

Aqui está uma pequena tabela dos valores possíveis para os tipos de dados possíveis:

          width                     minimum                         maximum
signed    8 bit                        -128                            +127
signed   16 bit                     -32 768                         +32 767
signed   32 bit              -2 147 483 648                  +2 147 483 647
signed   64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807
unsigned  8 bit                           0                            +255
unsigned 16 bit                           0                         +65 535
unsigned 32 bit                           0                  +4 294 967 295
unsigned 64 bit                           0     +18 446 744 073 709 551 615

Em Java, o Java Language Specification determina a representação dos tipos de dados.

A ordem é: byte 8 bits, short 16 bits, int 32 bits, long 64 bits. Todos esses tipos são signed, não há versões não assinadas. No entanto, as manipulações de bit tratam os números como não assinados (ou seja, manipulando todos os bits corretamente).

O tipo de dados de caractere char tem 16 bits de largura, unsigned e contém caracteres usando codificação UTF-16 (no entanto, é possível atribuir um char um inteiro arbitrário de 16 bits não assinado que representa um ponto de código de caractere inválido)

          width                     minimum                         maximum

SIGNED
byte:     8 bit                        -128                            +127
short:   16 bit                     -32 768                         +32 767
int:     32 bit              -2 147 483 648                  +2 147 483 647
long:    64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807

UNSIGNED
char     16 bit                           0                         +65 535
337
gaborsch

Em C, o inteiro (para máquinas de 32 bits) é de 32 bits e varia de -32768 a +32767.

Errado. O inteiro assinado de 32 bits na representação de complemento de 2 tem o intervalo -231 para 231-1 que é igual a -2,147,483,648 a 2,147,483,647.

70
Kos

Um número inteiro de 32 bits varia de -2.147.483.648 a 2.147.483.647. No entanto, o fato de você estar em uma máquina de 32 bits não significa que seu compilador C use números inteiros de 32 bits.

18
Ivaylo Strandjev

A definição da linguagem C especifica minimum ranges para vários tipos de dados. Para int, esse intervalo mínimo é de -32767 a 32767, o que significa que int deve ser pelo menos 16 bits de largura. Uma implementação é livre para fornecer um tipo int mais amplo com um intervalo correspondentemente mais amplo. Por exemplo, no servidor de desenvolvimento do SLES 10 em que trabalho, o intervalo é de -2147483647 a 2137483647.

Ainda existem alguns sistemas que usam tipos int de 16 bits (All The World is Não VAX x86), mas há muitos que usam tipos int de 32 bits e talvez alguns que usam 64 bits.

A linguagem C foi projetada para rodar em diferentes arquiteturas. O Java foi projetado para ser executado em uma máquina virtual que oculta essas diferenças arquitetônicas.

13
John Bode

O pôster tem seus tipos de Java misturados. em Java, seu C in é um curto: curto (16 bits) = -32768 a 32767 int (32 bits) = -2.147.483.648 a 2.147.483.647

http://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/datatypes.html

7
Brill Pappin

Isso porque em C - integer na máquina de 32 bits não significa que 32 bits são usados ​​para armazená-lo, pode ser de 16 bits também. Depende da máquina (dependente da implementação).

6
BlueLettuce16

O equivalente estrito do Java int é long int em C.

Edit: Se int32_t é definido, então é o equivalente em termos de precisão. long int garante a precisão do Java int, porque é garantia de pelo menos 32 bits de tamanho.

5
UmNyobe

Na verdade, o tamanho em bits de int, short, long depende da implementação do compilador.

Por exemplo. no meu Ubuntu de 64 bits eu tenho short em 32 bits, quando em outra versão de 32 bits do Ubuntu é 16 bit.

4
Alex

É realmente muito simples de entender, você pode até calcular com a calculadora google: você tem 32 bits para um int e os computadores são binários, portanto você pode ter 2 valores por bit (spot). se você computar 2 ^ 32 você obterá o 4.294.967.296. Então, se você dividir esse número por 2 (porque metade deles são números inteiros negativos e a outra metade é positiva), você obtém 2.147.483.648. e esse número é o maior int que pode ser representado por 32 bits, embora se você prestar atenção você notará que 2.147.483.648 é maior do que 2.147.483.647 por 1, isso porque um dos números representa 0 que está bem no meio, infelizmente 2 ^ 32 não é um número ímpar, portanto, você não tem apenas um número no meio, então os inteiros possíveis possuem uma cifra a menos enquanto os negativos obtêm a metade completa 2.147.483.648.

E é isso. Depende da máquina não na linguagem.

1
Emos Turi

No intervalo C para __int32 é –2147483648 a 2147483647. Veja aqui as faixas completas.

unsigned short 0 to 65535
signed short –32768 to 32767
unsigned long 0 to 4294967295
signed long –2147483648 to 2147483647

Não há garantias de que um 'int' será de 32 bits, se você quiser usar variáveis ​​de um tamanho específico, particularmente ao escrever código que envolva manipulações de bit, você deve usar o 'Standard Integer Types'.

Em Java

O tipo de dados int é um inteiro de complemento de dois de 32 bits assinado. Tem um valor mínimo de -2.147.483.648 e um valor máximo de 2.147.483.647 (inclusive).

1
Achintya Jha