För positiva heltal kan du rent matematiskt kan du räkna ut detta genom att addera ett till talet, ta 2-logaritmen och avrunda uppåt till närmaste heltal. Gissar att den lösning är diskvalificerad här då den lämpligen löses genom att utnyttja math modulen i Python.
Annars kan du tänka så här: hur översätts en binärt tal till decimalt? Tar vi 1010 som exempel blir detta
0 * 2^0 + 1 * 2^1 + 0 * 2^2 + 1 * 2 ^ 3 =
0 * 1 + 1 * 2 + 0 * 4 + 1 * 8 =
0 + 2 + 0 + 8 =
10
Omvänt, antal bitar som minst krävs för att representera talet 10 är positionen plus 1 (då datorvärlden börjar räkna positioner från noll...) på den bit vars vikt (2^pos = vikt) är lika med eller större än 10
I.e. något åt det här hållet om vi antar att värdet är ett positivt heltal (faktum är att det även fungerar med noll, d.v.s. alla tal i ℕ)
sätt antal_bitar till 0
gör följande till dess att loopen explicit avbryts
addera ett till antal_bitar
kolla om 2 upphöjt i värdet hos antal_bitar är större än ditt tal, om jag avbryt loopen
annars kör loopen igen
antal_bitar har nu det värde du letar efter
Rent krasst behöver du inte ens kolla om antal_bitar överstiger 16, Python kan hantera hur stora heltal som helst (givet att man har tillräckligt med RAM, men det lär vara ett totalt icke-problem i praktiken). I detta fall behöver du ändå det då uppgiften är att dela in talet i en av fyra klasser
negativa tal, dessa förkastas
ta större än 65535, d.v.s. tal som behöver mer än 16 bitar för att representeras, dessa förkastas
tal som kan representeras med 8 eller färre bitar
tal som kräver mer än 8 bitar, men kan representeras med 16 eller färre bitar