Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

Write a routine that counts the number of bits in a byte (soluzione)

Il problema chiedeva, utilizzando meno ipotesi possibili, di calcolare quello che sappiamo tutti, già dal primo contatto con l'informatica: il numero di bit in un byte.

Una soluzione potrebbe essere questa:

System.Convert.ToString(unchecked((byte)~0), 2).Length

tirata fuori da un'idea di Pietro Toniolo - ho apprezzato il fatto che NON ha pensato a "byte.MaxValue" (avrebbe fatto un'altra ipotesi ancora, quella del segno...). Però è un po' bruttino il fatto che calcoliamo il numero di bit in un tipo partendo da un valore (0) di quel tipo. Riusciamo a trovare una soluzione più "generale"?

Io ho pensato così:

System.BitConverter.ToString(new byte[1]).Replace("-", string.Empty).Length * 4

dove ci ricordiamo che la documentazione originale del metodo BitConverter.ToString dice:

"Return value: a String of hexadecimal pairs separated by hyphens, where each pair represents the corresponding element in value; for example, "7F-2C-4A"".

E' vero che noi passiamo al metodo ToString un array di un byte, quindi questo Replace in realtà non serve perché avremo trattini ("-") solo per più byte. Si ottiene la rappresentazione esadecimale della rappresentazione a bit di un byte (e il valore del byte non importa! anche se essendo un value type abbiamo un valore default). Il numero di cifre esadecimali si moltiplica per 4 visto che:

System.Math.Log(0xF + 1, 2)

è 4. Altre soluzioni? Commenti?

I versi del giorno: Pavese - "The cats will know" (p. 142):

"Tra fiori e davanzali
i gatti lo sapranno.
"

Print | posted on venerdì 22 ottobre 2004 22:16 | Filed Under [ Test Sharp ]

Powered by:
Powered By Subtext Powered By ASP.NET