Code: Select all
extract_msbs(0x'00110010'00010111'00000010'11001110'00100000'11001101'01011000'01111011) = 00010100
Die Idee, die ich zu entwickeln versucht habe, besteht darin, die anfängliche 64-Bit-Maske mit einer Konstante zu multiplizieren, die alle führenden Bits in den höchstwertigen 8 Bytes sammelt, und dann um 56 nach rechts zu verschieben. Ich konnte nicht die richtige Konstante finden (meine ursprüngliche Idee war 0x0102040810204081ULL, aber das ergibt das falsche Ergebnis von 10000001 statt 00000001 für 0x0000000000000080).
Kann jemand einen effizienten Weg finden, dies zu tun?