Na én azt szeretném megcsinálni, hogy lekérni egy szám UTOLSÓ bitjét, ami igaz.
Tehát ha a szám így néz ki binárisan: 0b011001000, akkor az \"utolsó 1-es pozíciójával\" térjen vissza, az jelen esetben 6.
Próbáltam a FindMSB-t, de az nem éppen azt csinálja, amire nekem lenne szükségem.
Valakinek valami ötlet?
A következõ megoldást próbáltam, de ez ugyanazt a hülyeséget csinálja, mint a FindMSB.
[pawn]
for(new i; i < 32; i++)
{
printf(\"%d\", iMyVal & (1 << i));
if(iMyVal & (1 << i))
{
iMaxPos = i;
}
}
// By Slice
stock FindMSB(iInput) {
//
http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogDeBruijn static const
aiDeBruijnBitPositionsPacked[32 char] = {
0x0A010900,
0x1D02150D,
0x12100E0B,
0x1E031916,
0x1C140C08,
0x0718110F,
0x06171B13,
0x1F04051A
}
;
if (iInput) {
#emit LOAD.S.pri iInput
#emit MOVE.alt
#emit SHR.C.alt 1
#emit OR
#emit MOVE.alt
#emit SHR.C.alt 2
#emit OR
#emit MOVE.alt
#emit SHR.C.alt 4
#emit OR
#emit MOVE.alt
#emit SHR.C.alt 8
#emit OR
#emit MOVE.alt
#emit SHR.C.alt 16
#emit OR
#emit CONST.alt 0x07C4ACDD
#emit UMUL
#emit SHR.C.pri 27
#emit ADD.C aiDeBruijnBitPositionsPacked
#emit LODB.I 1
#emit RETN
}
return -1;
}
[/pawn]