MSB einer Vorzeichenlosen Zahl detektieren (unsigned int)
-
Hallo zusammen,
wie kann ich das MSB (oberste Bit) einer Vorzeichenlosen Zahl detektieren (unsigned int)? Prinzipiell geht das schon über if-Abfragen, jedoch brauche ich einen hochperformanten Code, da "embedded system" ! Ich könnte mir vorstellen das es über Maskenvariablen irgendwie geht...
Vielen Dank, Euer Kevin
-
if(zahl & (~(~0U>>1))){ // MSB ist gesetzt } else{ // MSB nicht gesetzt }
-
TactX schrieb:
if(zahl & (~(~0U>>1))){ // MSB ist gesetzt } else{ // MSB nicht gesetzt }
Die erste Zeile sieht ein wenig "quick and dirty" aus. Kannst Du mir sagen was da passiert??? Viele Grüße
-
Wir nehmen einen 16 Bit unsigned int an (uint16_t)
0000 0000 0000 0000 <- 0U 1111 1111 1111 1111 <- ~0U 0111 1111 1111 1111 <- (~0U>>1) 1000 0000 0000 0000 <- (~(~0U>>1))
Das ist aber nicht "quick and dirty" sondern portabel. Quick and dirty wäre 0x8000.
-
TactX schrieb:
Wir nehmen einen 16 Bit unsigned int an (uint16_t)
0000 0000 0000 0000 <- 0U 1111 1111 1111 1111 <- ~0U 0111 1111 1111 1111 <- (~0U>>1) 1000 0000 0000 0000 <- (~(~0U>>1))
Das ist aber nicht "quick and dirty" sondern portabel. Quick and dirty wäre 0x8000.
ahhhh
. Nun kann aber der Fall eintreten dass das MSB der Zahl an jeder Beliebigen Position ist : 1,2,4,8,16,....,1024 -> das muss ich abfragen... . Der Code wird Teil einer "schnellen" Histogrammanalyse. Grüße, Kevin
-
du suchst das höchste gesetzte bit?
guckst du: http://graphics.stanford.edu/~seander/bithacks.html
und such' mal auf der seite nach: Find the log base 2 of an integer