Wie man eine vorzeichenlose Zahl mit dem bitweisen und logischen Operator in C @ vervierfac

Tor

4x ( 4.400000095 ) = 17.60000038
Legal ops: Beliebige ganzzahlige / vorzeichenlose Operationen inkl. ||, &&. auch wenn, währendMax ops: 30 Bit-Level-Äquivalent des Ausdrucks x + x + x + x für @ zurückgebfloating point argument f.

Mein Code:

unsigned 4x(unsigned uf) {
unsigned expn = (uf >> 23) & 0xFF;
unsigned sign = uf & 0x80000000;
unsigned frac = uf & 0x007FFFFF;
if (expn == 255 || (expn == 0 && frac == 0))  
    return uf;
if (expn) {
    expn << 2;
} else if (frac == 0x7FFFFF) {
    frac >> 2;
    expn << 2;
} else {
    frac <<= 2;
}

return (sign) | (expn << 23) | (frac);

}

Wie Sie sich vorstellen können, funktioniert mein Code nicht. Anstatt die Eingabe zu vervierfachen, wird die Eingabe verdoppelt. Ich weiß nicht warum, da der Bruch und der Exponent immer um 2 statt um 1 nach rechts / links verschoben werden. Ich arbeite mit Gleitkommawerten mit einfacher Genauigkeit in 32-Bit-Maschinen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage