Introdução
Neste laboratório, você aprenderá como verificar se um valor inteiro se enquadra no intervalo do tipo de dado short em Java. Começaremos entendendo o intervalo definido para short (-32768 a 32767) e, em seguida, prosseguiremos para verificar valores inteiros em relação a esses limites. Finalmente, exploraremos como lidar com valores de limite (boundary values) de forma eficaz.
Definir Intervalo Short (-32768 a 32767)
Nesta etapa, exploraremos o tipo de dado short em Java e entenderemos seu intervalo. Em programação, os tipos de dados são usados para classificar diferentes tipos de dados que uma variável pode conter. O tipo de dado short é um inteiro de complemento de dois com sinal de 16 bits. Isso significa que ele pode armazenar números inteiros, tanto positivos quanto negativos, dentro de um intervalo específico.
O intervalo de um short em Java é de -32.768 a 32.767. Entender esses limites é crucial para evitar erros como overflow (estouro) ou underflow (subfluxo), que ocorrem quando você tenta armazenar um valor fora do intervalo do tipo de dado.
Vamos criar um programa Java simples para ver o tipo de dado short em ação e observar seus limites.
Abra o arquivo
HelloJava.javano editor WebIDE, caso ele ainda não esteja aberto.Substitua todo o conteúdo do arquivo pelo seguinte código:
public class HelloJava { public static void main(String[] args) { // Declare and initialize a short variable short myShort = 10000; System.out.println("My short variable: " + myShort); // Demonstrate the maximum value of short short maxShort = 32767; System.out.println("Maximum short value: " + maxShort); // Demonstrate the minimum value of short short minShort = -32768; System.out.println("Minimum short value: " + minShort); } }Neste código:
- Declaramos uma variável
myShortdo tiposhorte atribuímos a ela o valor 10000. - Em seguida, declaramos
maxShorteminShorte atribuímos a elas os valores máximo e mínimo que umshortpode conter. - Usamos
System.out.println()para imprimir os valores dessas variáveis no console.
- Declaramos uma variável
Salve o arquivo (Ctrl+S ou Cmd+S).
Agora, vamos compilar nosso programa. Abra o Terminal na parte inferior do WebIDE e certifique-se de estar no diretório
~/project. Caso contrário, use o comandocd ~/project. Em seguida, compile o código usando o comandojavac:javac HelloJava.javaSe não houver erros, a compilação será bem-sucedida e um arquivo
HelloJava.classserá criado no diretório~/project.Finalmente, execute o programa compilado usando o comando
java:java HelloJavaVocê deve ver a seguinte saída no Terminal:
My short variable: 10000 Maximum short value: 32767 Minimum short value: -32768Esta saída confirma que nossas variáveis
shortestão armazenando os valores esperados dentro do intervalo definido. Na próxima etapa, exploraremos o que acontece quando tentamos atribuir valores fora desse intervalo.
Verificar Inteiro em Relação aos Limites Short
Na etapa anterior, vimos como declarar e usar variáveis short dentro de seu intervalo válido. Agora, vamos explorar o que acontece quando tentamos atribuir um valor que está fora do intervalo de short a uma variável short.
Java possui diferentes tipos de dados inteiros, incluindo byte, short, int e long, cada um com um intervalo diferente. Um int (inteiro) é um inteiro de complemento de dois com sinal de 32 bits, com um intervalo de -2.147.483.648 a 2.147.483.647. Este intervalo é muito maior do que o de um short.
Quando você tenta atribuir um valor de um tipo de dado maior (como int) a um tipo de dado menor (como short), o Java exige que você diga explicitamente que está ciente da possível perda de informações. Isso é chamado de type casting (conversão de tipo). Se você não fizer a conversão, o Java fornecerá um erro de compilação para evitar a perda acidental de dados.
Vamos modificar nosso programa HelloJava.java para demonstrar isso.
Abra o arquivo
HelloJava.javano editor WebIDE.Substitua o código existente pelo seguinte:
public class HelloJava { public static void main(String[] args) { int largeInt = 40000; // This value is outside the short range // Attempt to assign largeInt to a short variable without casting // short myShort = largeInt; // This line will cause a compilation error // To assign a value from a larger type, we need to cast it short myShort = (short) largeInt; System.out.println("Value of largeInt cast to short: " + myShort); int anotherLargeInt = -40000; // Another value outside the short range short anotherShort = (short) anotherLargeInt; System.out.println("Value of anotherLargeInt cast to short: " + anotherShort); } }Neste código atualizado:
- Declaramos uma variável
intlargeIntcom o valor 40000, que é maior que o valor máximo que umshortpode conter (32767). - A linha comentada
short myShort = largeInt;mostra o que aconteceria sem a conversão – um erro de compilação. - A linha
short myShort = (short) largeInt;demonstra como converter o valorintpara umshort. O(short)antes delargeInté o operador de conversão. - Fazemos o mesmo para um valor negativo
anotherLargeInt(-40000), que é menor que o valor mínimo que umshortpode conter (-32768).
- Declaramos uma variável
Salve o arquivo (Ctrl+S ou Cmd+S).
Agora, compile o programa modificado no Terminal:
javac HelloJava.javaDesta vez, a compilação deve ser bem-sucedida porque usamos a conversão de tipo.
Execute o programa compilado:
java HelloJavaVocê verá uma saída semelhante a esta:
Value of largeInt cast to short: -25536 Value of anotherLargeInt cast to short: 25536Observe que os valores de saída (-25536 e 25536) não são os valores originais (40000 e -40000). Isso ocorre porque, quando você converte um valor que está fora do intervalo do tipo de dado de destino, o valor "envolve" (wraps around). Este é um exemplo de overflow (para valores positivos que excedem o máximo) e underflow (para valores negativos que excedem o mínimo). O valor resultante exato depende de como os números são representados em binário. Isso demonstra por que entender os intervalos de tipos de dados e usar a conversão com cuidado é importante para evitar resultados inesperados.
Lidar com Valores de Limite
Nas etapas anteriores, aprendemos sobre o intervalo do tipo de dado short e vimos o que acontece quando convertemos valores inteiros maiores que estão fora desse intervalo. Também é importante entender como o Java lida com valores exatamente nos limites do intervalo short (-32768 e 32767).
Ao trabalhar com valores nos limites, você precisa ter cuidado, especialmente ao realizar operações aritméticas. Adicionar 1 ao valor máximo ou subtrair 1 do valor mínimo pode levar a overflow (estouro) ou underflow (subfluxo), fazendo com que o valor se envolva para a outra extremidade do intervalo.
Vamos modificar nosso programa HelloJava.java mais uma vez para demonstrar esse comportamento limite.
Abra o arquivo
HelloJava.javano editor WebIDE.Substitua o código existente pelo seguinte:
public class HelloJava { public static void main(String[] args) { short maxShort = 32767; System.out.println("Maximum short value: " + maxShort); // Adding 1 to the maximum short value // Note: The result of maxShort + 1 is an int by default int overflowInt = maxShort + 1; System.out.println("Maximum short + 1 (as int): " + overflowInt); // Casting the overflowed int back to short short overflowShort = (short) overflowInt; System.out.println("Maximum short + 1 (cast to short): " + overflowShort); short minShort = -32768; System.out.println("Minimum short value: " + minShort); // Subtracting 1 from the minimum short value // Note: The result of minShort - 1 is an int by default int underflowInt = minShort - 1; System.out.println("Minimum short - 1 (as int): " + underflowInt); // Casting the underflowed int back to short short underflowShort = (short) underflowInt; System.out.println("Minimum short - 1 (cast to short): " + underflowShort); } }Neste código:
- Começamos com o valor
shortmáximo (maxShort). - Adicionamos 1 a
maxShort. Por padrão, as operações aritméticas envolvendoshort(ebyte) são promovidas paraint. Portanto,maxShort + 1resulta em umint. Armazenamos isso emoverflowInt. - Em seguida, convertemos
overflowIntde volta para umshorte o armazenamos emoverflowShort. É aqui que o estouro acontece e o valor se envolve. - Fazemos operações semelhantes com o valor
shortmínimo (minShort), subtraindo 1 para demonstrar o subfluxo.
- Começamos com o valor
Salve o arquivo (Ctrl+S ou Cmd+S).
Compile o programa no Terminal:
javac HelloJava.javaExecute o programa compilado:
java HelloJavaVocê deve ver uma saída semelhante a esta:
Maximum short value: 32767 Maximum short + 1 (as int): 32768 Maximum short + 1 (cast to short): -32768 Minimum short value: -32768 Minimum short - 1 (as int): -32769 Minimum short - 1 (cast to short): 32767Como você pode ver, quando adicionamos 1 ao valor
shortmáximo (32767) e o convertemos de volta parashort, ele se envolve para o valor mínimo (-32768). Da mesma forma, subtrair 1 do valorshortmínimo (-32768) e converter de volta parashortse envolve para o valor máximo (32767).Este comportamento é importante lembrar ao trabalhar com tipos inteiros de tamanho fixo como
short. Esteja sempre atento ao intervalo do tipo de dado para evitar resultados inesperados devido a estouro ou subfluxo.
Resumo
Neste laboratório, aprendemos sobre o tipo de dado short em Java, entendendo sua natureza de complemento de dois com sinal de 16 bits e seu intervalo específico de -32.768 a 32.767. Exploramos como declarar e inicializar variáveis short e demonstramos os valores máximo e mínimo que ele pode conter por meio de um programa Java simples. Esta etapa fundamental é crucial para evitar potenciais erros de overflow (estouro) ou underflow (subfluxo) ao trabalhar com valores inteiros dentro desse intervalo.



