You should know that variable values are cyclic in Java.
public class Test{
public static void main(String args[]){
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
int x = Integer.MAX_VALUE + 1;
System.out.println(x);
}
}
This produces:
2147483647
-2147483648
-2147483648
Na verdade, não é que os valores de variáveis de java são cÃclicos, é uma coisa de arquitetura, de máquina mesmo os 31bits foram usados por completos, mas o assembler incrementa de qualquer jeito, então o valor vai para o bit 32, mas sabe-se que isso torna um número negativo, segundo a codificação complemento de 2. Em C/C++ acontece a mesma coisa. “Programando” em assembler, é possÃvel ver isso, facilmente. Não sei se existe alguma linguagem que faz esse tipo de tratamento, mas as que eu vi até hoje, esse “erro” acontece simplesmente porque não tem a ver com elas, mas sim com a capacidade da máquina e a arquitetura.
@Onilton Maciel,
mais ou menos, eu encaro esse comportamento cÃclico como uma convenção.
Por exemplo em Ruby se eu pegar uma variável to typo Fixint e ir incrementando incrementando, ela vai chegar um momento que ela se tornará um Bignum. A conversão é feita automaticamente. Acho que Python também se comportaria assim. Legal, né?
http://en.wikipedia.org/wiki/Computer_numbering_formats#Numbers_in_programming_languages
Concordo com você, mas eu vejo assim, a diferença é que C/C++, Java e algumas outras linguagens não dão tratamento nenhum, por isso o comportamento cÃclico acontece, por causa da forma que o número é pensado, complemento de 2. Eles (Java/C) não convencionaram nada, apenas por preguiça (hehe ou tradição, caracterÃstica do nÃvel da linguagem mesmo, ou sei lá), não aplicaram tratamento nenhum.
http://en.wikipedia.org/wiki/Computer_numbering_formats#Two.27s_complement
Em linguagens com um nÃvel mais alto, como python, ruby, como você falou, esse tratamento é feito, e nesse caso há convenções! 😉
Mas, mudando de assunto, você tem o solaris na sua máquina?
Eu não consegui baixar uma iso, elas têm 1.2GB!!!! Eu só queria fazer um teste….
Sabe se o comando od funciona em um diretório vazio? E o que ele retorna?
@Onilton, tenho um Solaris Express Developer Edition (que é uma distribuição do OpenSolaris) instalada em minha máquina.
Em que estado você mora? Você pode pedir um Starter Kit que é enviado para sua casa.
Amazonas :P…. Vai demorar muito para chegar… Eu acho que vou tentar baixar mesmo… Era só uma pergunta, para ver se eu evitava o trabalho de baixar o SO… que é muito grande.
gostaria de saber pq vc usou Integer.MAX_VALUE..pra que serve isso??
@deborah,
Integer.MAX_VALUE retorna o maior valor do tipo inteiro. No exemplo, 2147483647.