Как удвоить число без знака, используя побитовый и логический оператор в C

Цель:

4x ( 4.400000095 ) = 17.60000038
Юридические операции: любые целочисленные / беззнаковые операции, в т.ч. ||, &&. также если в то время какМакс опс: 30Возвращает битовый эквивалент выражения x + x + x + x дляаргумент с плавающей точкой f.

Мой код:

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);

}

Как вы можете догадаться, мой код не работает. Вместо четырехкратного ввода, ввод удваивается. Я не знаю, почему, поскольку дробь и показатель степени всегда сдвигаются вправо / влево на 2 вместо 1. Я работаю со значениями с плавающей запятой одинарной точности на 32-битных машинах.

Ответы на вопрос(2)

Ваш ответ на вопрос