Duvida sobre int

Ola pessoal, estou lendo a apostila do caelum ( vamos ver se nao desisto dessa vez rsrs ) e tem os seguintes problemas:

[quote]4) Imprima os fatoriais de 1 a 10.
O fatorial de um número n é n * n-1 * n-2 … até n = 1. Lembre-se de utilizar os parênteses. O fatorial de 0 é
1 O fatorial de 1 é (0!) * 1 = 1 O fatorial de 2 é (1!) * 2 = 2 O fatorial de 3 é (2!) * 3 = 6 O fatorial de 4 é (3!) *
4 = 24
Faça um for que inicie uma variável n (número) como 1 e fatorial (resultado) como 1 e varia n de 1 até 10:
for (int n=1, fatorial=1; n <= 10; n++) {

  1. Aumente a quantidade de números que terão os fatoriais impressos, até 20, 30, 40. Em um determinado
    momento, além desse cálculo demorar, vai começar a mostrar respostas completamente erradas. Porque?
    Mude de int para long, e você poderá ver alguma mudança.[/quote]

Beleza, o exericio 4 eu estava pensando que era dificil e talz, ate cheguei a me embananar pois tenho um pouco de dificuldade com logica e talz mas dai dei uma pesquisada aqui no forum e achei a resposta, e era facil ate d+ rsrs

Mas o problema esta no exercicio 5. Quando eu mudo para achar o fatoriais ate 20 começa aparecer negativos, se eu mudo para tipo long os negativos desaparem… Sei que isso tem haver com o tamanho suportado das variaveis, porem nao entendi muito bem.

Reparei que alguns fatoriais do tipo long sao diferentes do tipo int, porem nao sei o motivo… Li algo hoje sobre conversoes implicitas/explicitas… Tem algo haver?

Alguem poderia me explicar melhor o porque esta acontecendo isso?

Abraços

Faça um teste.

Crie um programa que imprime um byte na sua forma binária. Depois, imprima (usando uma variável byte) todos os números de 0 até 1000.

Troque de byte para short e veja o que acontece. :wink:

[quote=ViniGodoy]Faça um teste.

Crie um programa que imprime um byte na sua forma binária. Depois, imprima (usando uma variável byte) todos os números de 0 até 1000.

Troque de byte para short e veja o que acontece. ;)[/quote]

Nao entendi muito bem quando voce fala pra imprimir um byte na forma binaria… voce fala em ‘0’ e ‘1’ ?

Eu fiz esse o codigo:

public class Teste { public static void main ( String args[] ) { for ( byte i = 1; i < 1000; i++ ) { System.out.println(i); } } }

Quando executei, ficou em um loop infinito, de 0 a 127 depois ele virava negativo e ia diminuindo…

Passei para short e funcionou pois o short suporta um tamanho maior de bits… isso eu sei :slight_smile:

Estava lendo um tutorial que fala um pouco sobre conversoes e talz, porem achei um pouco dificil quando ele começa falar do tamanho maximo… =[

O link do tutorial que estava lendo é: http://www.javafree.org/javabb/viewtopic.jbb?t=6944&Cap-3--Operadores-e-atribuicoes

Voce poderia explicar fazendo favor se possivel? Explicar desde a transformação binaria de alguns numeros ate o porque ele vira negativo e talz…

E alem do byte poderia mostrar outro como o int por exemplo? Pode fazer isso fazendo favor?

Obrigado pela ajuda ViniGodoy.

Abraços

1 curtida

a diferença mais e´pressiva éno tamanho …
um byte é bem menor e ocupa menor espaço por isso demora menos para compilar … mas tem a mesma função que int e long, só muda o tamanho maximo do numero que vc esta fazendo …
pra numeros pequenos usa se byte,para o defalt o int, e para grande o long

Isso, era para fazer em 0s e 1s mesmo.

Vendo a representação binária de cada número, você entende o porque dos problemas de conversão.

Mas está relacionado a representação das variáveis na memória.
O primeiro bit, refere-se ao sinal. Sendo 0 positivo e 1 negativo.
Se for 0, os outros bits referem-se ao número, na sua forma binária.

Sendo negativa, os bits estão invertidos, pois esses números negativos são representados em complemento de 2.

Quando vc converte um número “maior” num “menor”, por exemplo um short num byte, o Java simplesmente “remove” o primeiro byte, e o que sobre é o segundo, o que geralmente dá um número sem sentido. Essa “truncagem” também pode ocorrer numa soma onde o valor da variável é estourado.

Você perceberia isso facilmente vendo a representação binária dos shorts e bytes para números que estourem um byte. :wink:

Voce tem algum link que explica melhor sobre o assunto?

Estou estudando um pouco sobre soma e subtração de binarios… se isso ajudar :slight_smile:

Abraços