Oppure

Loading
12/12/10 13:03
a_butta
Ciao a tutti. La mia è una domanda più tendente alla matematica, dunque non sapendo dove porla, ho scritto qui tra gli algoritmi.

Non riesco a trovare un qualsiasi modo per calcolare, dato un qualsiasi numero in base 10, il numero di cifre che questo numero avrà in base 2.
Cioè, mi spiego meglio:
Avendo in input 25, vorrei che questo algoritmo mi restituisse 5, poichè 25 = 11001 in base 2...

Sono già riuscito a vedere come ogni volta che si aggiunge 8 partendo da un numero multiplo di 8, il numero binario aumenta di una cifra:
8 = 1000
16 = 10000
32 = 100000
64 = 1000000
Come è ovvio che sia. Ma non riesco a trarre una regola generale...

Grazie in anticipo per l'aiuto!:D
Ultima modifica effettuata da a_butta 12/12/10 13:05
aaa
12/12/10 13:10
a_butta
mmmh... potrei esserci arrivato.
Per caso varrebbe:
int((logN)/(log2)) + 1
dove N è il numero in base 10?
Ultima modifica effettuata da a_butta 12/12/10 13:11
aaa
12/12/10 19:13
TheKaneB
è banalmente ceil(log2(N))
aaa
12/12/10 20:02
a_butta
Postato originariamente da TheKaneB:

è banalmente ceil(log2(N))


E' vero! che scemo!! :D E dire che ero partito proprio da lì :D dopo per poter verificare tramite calcolatrice ho utilizzato il cambio di base, ma mi sono poi dimenticato della banale prima ipotesi :d
Grazie mille!
aaa
13/12/10 16:16
Il Totem
Se N = 0 usi -infinito cifre?
E' ceil(log2(N+1)) + 1. N+1 perché i numeri rappresentabili da 0 a N sono N+1. +1 alla fine per il bit di segno se usi la notazione modulo e segno o complemento a 2.
aaa
13/12/10 16:57
a_butta
Ovviamente avevo pensato anche a questo, risolto molto banalmente da un semplice
if (N == 0) return N; else return ceil(LOG2(N));

:D
aaa
14/12/10 16:47
Il Totem
Se N == 0, ti serve almeno una cifra; non puoi nemmeno utilizzare 0 cifre.
aaa
14/12/10 20:25
a_butta
sisi questo è vero, però per quello che serviva a me (all'interno di un altro algoritmo), mi bastava anche considerarlo di zero, pur sapendo che formalmente è sbagliato :)
aaa