C'è qualcosa di speciale nel numero 65535?

8

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

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

Il file binario che mi è stato chiesto di valutare era 1111111111111111 & 100000 ma non capisco perché 1111111111111111 non sia -1. Non dovrebbe essere -1? 65535 è un numero che dà overflow e come faccio a saperlo?

    
posta Niklas Rosencrantz 22.11.2012 - 20:49
fonte

3 risposte

21

Il numero viene considerato come un intero unsigned in questo caso, il che significa che tutti i bit impostati non produrranno -1 (se fosse stato firmato allora sì, si sarebbe corretto). Quindi tutti i 16 bit impostati ti daranno 65535.

È interessante notare che lo stato firmato non è un fattore quando si eseguono operazioni di bit logico. I bit non sono firmati poiché sono il componente più basso di un computer. È specificato dall'operazione cpu se i bit in es. un registro sarà considerato firmato o non firmato.

I numeri negativi vengono prodotti impostando il bit più significativo (MSB) a vero SE il numero è trattato come firmato (quale "lato" o quale bit esterno verrà impostato varia a seconda dell'architettura della cpu, ad esempio big-endian / little-endian).

    
risposta data 22.11.2012 - 20:59
fonte
17

È è banale. 65535 in binario è tutto, quindi ANDing con qualsiasi X inferiore a 65535 ti darà X.

    
risposta data 22.11.2012 - 20:55
fonte
10

Rispondere alla seconda parte della tua domanda. Hai taggato come così, 65535 in 32 bit è 00000000000000001111111111111111 , firmato o non firmato è non -1.

    
risposta data 23.11.2012 - 10:41
fonte

Leggi altre domande sui tag