C'è qualcosa di speciale nel numero 65535?


11

2¹⁶-1 & 2⁵ = 2⁵ (o? Ovviamente?)

Uno sviluppatore mi ha chiesto oggi cosa sono 65535 bit a bit e 32 ie 2¹⁶-1 & 2⁵ =? All'inizio ho pensato spontaneamente a 32, ma mi è sembrato facile dopo di che ho pensato per diversi minuti e poi ho risposto a 32. 32 sembra essere stata la risposta corretta, ma come? 65535 = 2¹⁶-1 = 1111111111111111 (ma non sembra giusto dal momento che questo numero binario tutti dovrebbero essere -1 (?)), 32 = 100000 ma non sono riuscito a convertirlo nella mia testa, dopo di che ho comunque risposto 32 dato che avevo per rispondere a qualcosa. La risposta 32 è in effetti banale? È allo stesso modo 2¹⁶-1 e 2⁵-1 = 31? Perché lo sviluppatore mi ha chiesto esattamente 65535?

Binario quello che mi è stato chiesto di valutare era 1111111111111111 e 100000 ma non capisco perché 1111111111111111 non sia -1. Non dovrebbe essere -1? 65535 è un numero che genera overflow e come faccio a saperlo?


3
Deve esserci qualcosa di speciale. Mi ricorda 56 6635, lo standard nazionale ceco per la birra. Hmmmm ... tempo per una birra.
joshp,

5
Fai troppe assunzioni: 65535 dà -1 solo nell'aritmetica del complemento a due bit a 16 bit. Fornisce -0 nell'aritmetica del complemento a 16 bit e 65535 nell'aritmetica del complemento a 32 bit e complemento del proprio complemento.
mouviciel,

3
È il limite superiore delle porte TCP.
Renae Lider,

Risposte:


23

Il numero viene trattato come un numero intero senza segno in questo caso, il che significa che tutti i bit impostati non produrranno -1 (se fosse firmato allora sì, avresti ragione). Quindi tutti i 16 bit impostati ti daranno 65535.

È interessante notare che lo stato firmato non è un fattore quando si eseguono operazioni di bit logici. I bit non sono essi stessi firmati in quanto sono il componente più basso in un computer. È specificato dall'operazione cpu se i bit in ex. un registro sarà trattato firmato o non firmato.

I numeri negativi vengono prodotti impostando il bit più significativo (MSB) su vero SE il numero viene trattato come con segno (quale "lato" o quale bit esterno verrà impostato varia in base all'architettura della CPU, ad esempio big-endian / little-endian ).


9
La maggior parte delle macchine moderne si converte in negativo lanciando i bit e aggiungendo un complemento di 2: 2. Basta impostare un bit per avere il problema di avere +0 e -0.
James,

1
Questo non è necessariamente un problema. Il complemento di 1 si tronca verso zero, indipendentemente dal segno del risultato. Il complemento di 2 si tronca verso l'infinito. In alcune applicazioni, questo può metterti nei guai.
John R. Strohm,

18

Si è banale. 65535 in binario è tutto uno, quindi ANDING con qualsiasi X inferiore a 65535 ti darà X.


10

Rispondere alla seconda parte della tua domanda. Hai codificato come così, 65535 a 32 bit è 00000000000000001111111111111111, con o senza segno è non è -1.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.