2015-06-22 21 views
5

Curioso di quanto velocemente oltre sé sarebbe cresciuto, ho scritto un po 'di ciclo rapido in Java per vedere:Perché questa auto aggiunta è uguale a 0?

int count = 1; 
while(true){ 
    System.out.println(count); 
    count += count; 
} 

L'output è stato inaspettato:

0 
0 
0 
0 
0 
... 

perché è questo? count viene inizializzato su 1, quindi l'aggiunta interna dovrebbe essere eseguita su count + count o 1 + 1. Perché il risultato è 0?

+8

mettere un breve 'Thread.sleep' tra iterazioni del ciclo. –

+1

Immaginate che ci sia un valore 'int x' che quando fate' x + = x' supera il numero intero a '0'. Quali sarebbero i tuoi risultati dopo di esso? – Pshemo

+0

cosa farebbe @SotiriosDelimanolis –

risposta

13

L'output che hai postato è le righe finali dell'output, non le prime 30-31 linee. Va così veloce che dopo le prime 31 iterazioni va oltre INT MAX e l'aggiunta risulta in 0. Ricorda che un numero intero con segno ha un valore massimo di 2^31 o 4 byte con un bit di segno.

Invece di provare while(true) {while(count>0) {, si arriva a vedere le prime iterazioni quando non era 0.

+1

Sì, ha senso. Il risultato dovrebbe andare a 0 sulla 32a iterazione, corrispondente al numero di bit in un intero con segno. Grazie. –

Problemi correlati