2012-10-12 14 views
11

Scusate se questa è una domanda di base, ma perché c'è un segno negativo per il lato positivo?Perché il numero intero massimo in java 2^31 - 1 e non 2^31

Ha a che fare con lo zero memorizzato o qualcosa del genere? Ho pensato che il calcolo del numero più alto possibile per decimali binario sarebbe solo per aggiungere le potenze di due su, come per un 3 bit unsigned sarebbe

1*2^0 + 1*2^1 + 1*2^2 = 7 

Non dovrebbe applicare la stessa regola per gli interi java? Grazie

+1

A causa di [complemento a due] (http://en.wikipedia.org/wiki/Two's_complement); vedi domanda correlata: http://stackoverflow.com/questions/3809044/how-many-values-can-be-represented-with-9-bits/3809058#3809058 – NullUserException

+0

Madre di Dio, la prima volta che pubblica un tag java e ci sono tante risposte, grazie a tutti! –

risposta

12

Poiché Java può supportare max signed int come 0x7fffffff che è 2^31-1.

2^31 = 0x80000000 is negative so Positive is 2^31-1 

binario comparasion livello sarebbe:

10000000000000000000000000000000 --> 2147483648 --> 2^31 
01111111111111111111111111111111 --> 2147483647 --> 2^31 -1 
^ Sign bit 
+0

Grazie, questo lo rende un po 'più chiaro –

+1

"Bit firmato" dovrebbe essere "Segno bit" – Roland

6

La stessa regola si applica ... 7 è 2^3 - 1. E sì, è a causa della 0. :)

Al contrario, negativi vanno a -(2^31)

Quindi c'è 2^31 numeri negativi, uno 0 e 2^31-1 positivi severe, che si aggiungono alla ...

2^31 + 1 + 2^31 - 1 = 2 * 2^31 = 2^32 
2

Deve dividere 2^32.
1/2 sono negativi.
0 conta con il positivo.
In matematica 0 non è né negativo né positivo.
È coerente in .NET e MSSQL.

Se si nota che il set che non include i negativi viene chiamato senza segno.
Esso contiene 0 e non è corretto chiamarlo positivo.
Poiché il mondo binario parte da 0, è considerato positivo.
La risposta di Jack (+1) ha perché.

+1

0 non è considerato positivo, è inserito tra i numeri positivi nel complemento a due solo per una questione di convenienza. – Jack

+0

@NullUserException Hai ragione ho solo Wiki e aggiornato la mia risposta. – Paparazzi

3

Ci sono 2^31 numeri non negativi compresi tra 0 e 2^31-1. Quindi, sì, zero viene memorizzato anche come numero intero. E anche, ci sono numeri negativi 2^31 che vanno da -2^31 a -1.

1

Se si dispone di n bit, si hanno 2^(n-1) numeri negativi (come il primo bit è un 1) e 2^(n-1) numeri non negativi. Dato che zero è un numero non negativo hai fino a 2^(n-1) -1 numeri positivi che è anche il massimo.

Nota: non c'è positivo per il numero più negativo in modo

-Integer.MIN_VALUE == Integer.MIN_VALUE 
5

E 'a causa della convenienza di complemento a due (che evita la memorizzazione di due zeri), e memorizza Java numeri che utilizzano tale rappresentazione. Dai uno sguardo allo here.

0

interi Java sono firmati quantità, in modo da un bit è riservato per il segno, lasciando 31 bit per il valore.

Problemi correlati