Bitmuster "rückwärts" dekrementieren
Verfasst: Sonntag 8. Dezember 2013, 21:11
Moin!
Ich habe eine Zahl, die ich als Bitmuster betrachte.
Und die möchte ich jetzt dekrementieren - allerdings mit umgedrehten Wertigkeiten der Bits.
Also ganz links das Bit 0.
Ich habs mal hingepfuscht, indem ich die Zahl nach String wandel, dann einen "reverse" mache, zurück nach Zahl, -1, wieder String, wieder reverse und dann wieder nach Zahl.
Das geht - gefällt mir so aber überhaupt nicht.
Hier der Programmcode:
Liefert wie gewünscht:
1111 15
0111 7
1011 11
0011 3
1101 13
0101 5
1001 9
0001 1
1110 14
0110 6
1010 10
0010 2
1100 12
0100 4
1000 8
0000 0
Ich habe irgendwie wohl gerade eine Sperre im Kopp....und finde keinen Ansatz für eine elegantere Umsetzung von highbit_dec()... :K
Hat hier Jemand eine Idee, wie ich das hübscher und ohne den Umweg über Strings bauen kann?
Vielen Dank im voraus,
Detlev
Ich habe eine Zahl, die ich als Bitmuster betrachte.
Und die möchte ich jetzt dekrementieren - allerdings mit umgedrehten Wertigkeiten der Bits.
Also ganz links das Bit 0.
Ich habs mal hingepfuscht, indem ich die Zahl nach String wandel, dann einen "reverse" mache, zurück nach Zahl, -1, wieder String, wieder reverse und dann wieder nach Zahl.
Das geht - gefällt mir so aber überhaupt nicht.
Hier der Programmcode:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def highbit_dec(val, bits):
bm="0"*bits + bin(val)[2:] # Zahl -> String
bm2=bm[len(bm)-bits:] # Ausrichten
rbm=bm2[::-1] # Reverse
v2=eval("0b"+rbm)-1 # String -> Zahl und -1
v3="0"*bits+bin(v2)[2:] # Zahl -> String
v4=v3[len(v3)-bits:] # Ausrichten
v5=v4[::-1] # Reverse
return(eval("0b"+v5)) # String -> Zahl
def binprint(val, bits):
b="0"*bits+bin(n)[2:]
return(b[len(b)-bits:])
n=15
print binprint(n, 4), n
for i in range(15):
n=highbit_dec(n, 4)
print binprint(n, 4), n
1111 15
0111 7
1011 11
0011 3
1101 13
0101 5
1001 9
0001 1
1110 14
0110 6
1010 10
0010 2
1100 12
0100 4
1000 8
0000 0
Ich habe irgendwie wohl gerade eine Sperre im Kopp....und finde keinen Ansatz für eine elegantere Umsetzung von highbit_dec()... :K
Hat hier Jemand eine Idee, wie ich das hübscher und ohne den Umweg über Strings bauen kann?
Vielen Dank im voraus,
Detlev