2011-11-18 8 views
8

Sto imparando solo su binario e byte. Capisco che 8 bit costituiscono un byte e che un byte può avere 256 possibilità. La cosa che mi sono confuso circa è questo:Che cosa è esattamente un byte e che cosa ha a che fare con il binario?

byte[] b = new byte[] { 85, 85, 67, 75 }; 

Che cosa significa 85 o uno qualsiasi dei numeri di cui sopra hanno a che fare con il binario. C'è semplicemente qualcosa che non scatta completamente nella mia mente.

+12

"Non c'è dubbio troppo semplice". "Non c'è dubbio troppo semplice". "Non c'è dubbio troppo semplice". La sua non funziona. –

+3

'85' non ha nulla a che fare con' binary', perché è 'decimale'. '85 base 10' ==' 1010101 base 2'. È solo un modo di rappresentare un numero – Rob

+0

Non è quel blocco di codice che dichiara semplicemente una matrice di byte e ogni numero rappresenta un diverso byte? – Ari

risposta

12

Il binario è il modo in cui le cose vengono memorizzate all'interno del computer. Uno e zero, acceso e spento, vero e falso, presenza o assenza di corrente elettrica. This Wikipedia article gli dà un trattamento abbastanza accurato.

Una rappresentazione come "85" nell'esempio è come un byte è formattato per la nostra comodità come lettori umani. Potrebbe essere formattato in esadecimale (base 16) come "55", in ottale (base 8) come "125" in binario come "1010101", o anche "11" nella base-84 se eri così inclinato. Tutti significano la stessa cosa.

+5

Mi dispiace contraddirti, ma uno zero non è l'assenza di corrente elettrica, è solo una quantità diversa di esso. Non che il PO probabilmente si preoccupi di questo. –

+1

@Chris: Ovviamente ... stati di alta e bassa logica. I over semplificato. –

+1

+1 Questa domanda è solo urla per Wikipedia (non MSDN) – sq33G

3

A byte in C# è solo un valore intero di 8 bit. In quanto sopra, stai rappresentando 4 numeri in un array - questo non è molto diverso da come sarebbe se tu usassi int, eccetto che i numeri prendono 1/4 dello spazio totale in memoria.

In realtà non ha nulla a che fare con "binario", a parte la rappresentazione più comune utilizzata per i dati binari. Questo perché la maggior parte dei sistemi riguarda un "byte" alla volta, che è un blocco di dati a 8 bit. In quanto tale, un byte è un modo comune per rappresentare questi dati se si sta facendo qualcosa che funziona con informazioni binarie non elaborate.

La classe BitConverter ha routine per passare da matrici di byte ad altri tipi e viceversa. Ad esempio, può valore take 4 bytes and turn it into an Int32 o andare al contrario. Ricorda: tutti i dati memorizzati sono solo memoria: stai salvando una sequenza di bit (1 e 0) in un ordine specifico e il sistema sta interpretando questi dati in un modo specifico.

3

Questi sono solo numeri. Non hanno nulla a che fare con il binario di per sé. Puoi scriverli in binario, tuttavia, se lo desideri, ad esempio, 75 = 01001011 nella base 2.

A byte qui, quindi, è solo un tipo di dati che può contenere uno dei 256 valori possibili. In genere questo viene interpretato come un numero compreso tra 0 e 255 o 8 cifre binarie (cioè 8 valori ON/OFF). Questi sono solo due modi di guardare la stessa cosa.

0

Ciascun numero nell'array è inferiore a 256. Vengono convertiti in byte in binario. Questa è solo la loro rappresentazione decimale.

3

Questa istruzione dichiara una matrice di byte e assegna ad essa 4 elementi, ognuno dei quali è un byte singolo (in teoria!) Di dimensioni. I valori attuali - 85, 86, 67, 75 - memorizzati in quell'array sono tutti valori che possono essere contenuti in un singolo byte. Nel tuo esempio di codice, questi valori sono rappresentati in forma decimale. Una volta che il codice viene tradotto in forma eseguibile, tali valori potrebbero essere viste dal computer nelle loro rappresentazioni binarie, sbandierati dal registro per registrare, spinto, spuntato, e accumulati, ecc

Si potrebbe rappresentare i valori in altre basi all'interno della tua sorgente - esadecimale, o base 16, ad esempio, che è più vicino al metallo che non decimale, e di conseguenza consente al tuo processo mentale di spostarsi facilmente tra la rappresentazione umana e ciò che il tuo codice sta effettivamente dicendo, dato che virtualmente non esiste una vera matematica andare mentalmente tra hex e binary; un altro buon esempio è ottale.

Oppure puoi pensare in questo modo: rappresenta i valori all'interno del tuo codice usando la base che meglio si riferisce a ciò che stai facendo. Se stai combinando le autorizzazioni o i valori dei colori, esadecimale o ottale; se stai calcolando l'interesse su un conto corrente, la scelta più ovvia è decimale.

Ora, per il tuo specifico snippet di codice: se hai a che fare con singoli caratteri o scrivendo roba grezza su un dispositivo a blocchi, una serie di byte potrebbe essere perfetta - tuttavia, quando diventi uno con il tuo compilatore, il tuo cervello può eventualmente considerare hex la rappresentazione più facile da maneggiare.

+0

... e vedo sempre le cose dopo il fatto che mi piacerebbe averlo menzionato prima degli altri, ma perdo di nuovo: spremere per l'efficienza dello storage è un'altra ragione per cui si potrebbe usare il tipo byte invece del tipo int. – Christopher

+0

Come sei riuscito a comprenderne così bene? Online o a scuola? –

+1

Certamente non scuola - ho malamente bocciato di scuola superiore, e non è andato oltre. Neanche online; libri, sperimentazione, duri colpi e molte notti solo io, il mio compilatore, e abbondanti quantità di caffè bollente. Trovati un pratico - e premendo! - bisogno di programmare qualcosa, qualsiasi cosa. Se il bisogno è assolutamente terribile, e la scadenza è la prima cosa al mattino, puoi diventare abbastanza veloce. :) – Christopher

4

85 è semplicemente un decimale (ad esempio "base 10") positional notation di un numero. Significa:

8 *^1 + 5 *^0

= 8 * 10 + 5 * 1

= 80 + 5

= 85

Tuttavia, è possibile scegliere qualsiasi base per rappresentare i numeri. Noi umani abbiamo 10 dita che sono la probabile origine del sistema "base 10" nell'uso quotidiano, ma non c'è modo di rappresentare 10 cifre diverse nel circuito fisico del computer. Questo circuito comprende solo la mancanza di elettroni rispetto alla presenza di elettroni - cioè solo due cifre, quindi il sistema binario.

Così, mentre è possibile scrivere decimale 85 nel codice sorgente del programma (per mantenerlo più naturale per l'uomo), in ultima analisi, viene rappresentato all'interno del computer come binario 1010101, che è uguale a ...

1 *^6 + 0 *^5 + 1 *^4 + 0 *^3 + 1 *^2 + 0 *^1 + 1 *^0

= 1 * 64 + 0 * 32 + 1 * 16 + 0 * 8 + 1 * 4 + 0 * 2 + 1 * 1

= 64 + 16 + 4 + 1

= 85


proposito, sistema decimale non "allinearsi" con binario - una sola cifra decimale non può essere rappresentato da un numero "intero" di cifre binarie e numeri decimali rotonde non corrispondono bene i numeri binari rotonde. Ad esempio:

  • 10 (decimale) = 1010 (binario)
  • 100 (decimale) = 1100100 (binario)
  • 1000 (decimale) = 1.111.101 mila (binario)
  • ecc ...

volte, è conveniente usare un sistema numerico che non "allinearsi" con binario, come octal (una cifra ottale è esattamente 3 cifre binarie) o hexadecimal (una cifra esadecimale è esattamente 4 cifre binarie).

Il punto importante è che tutti questi sistemi alla fine vengono rappresentati come binari all'interno del computer.

Su un lato-nota: "esadecimale" utilizzato per essere "sexa -decimal", ma a quanto pare alcuni offeso sensibilità puritanic;)