Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Algoritmi - Calcolare il numero di cifre binarie di un numero in base 10
Forum - Algoritmi - Calcolare il numero di cifre binarie di un numero in base 10

Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 14:03
Domenica, 12/12/2010
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 il 12/12/2010 alle 14:05
PM
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 14:10
Domenica, 12/12/2010
mmmh... potrei esserci arrivato.
Per caso varrebbe:
int((logN)/(log2)) + 1
dove N è il numero in base 10?

Ultima modifica effettuata da a_butta il 12/12/2010 alle 14:11
PM
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 20:13
Domenica, 12/12/2010
è banalmente ceil(log2(N))

PM
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 21:02
Domenica, 12/12/2010
Testo quotato

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!

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 17:16
Lunedì, 13/12/2010
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.

PM
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 17:57
Lunedì, 13/12/2010
Ovviamente avevo pensato anche a questo, risolto molto banalmente da un semplice
Codice sorgente - presumibilmente C++

  1. if (N == 0) return N; else return ceil(LOG2(N));


:D

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 17:47
Martedì, 14/12/2010
Se N == 0, ti serve almeno una cifra; non puoi nemmeno utilizzare 0 cifre.

PM
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 21:25
Martedì, 14/12/2010
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 :)

PM