В битах C умножьте на 3 и разделите на 16

У моего приятеля были такие загадки, а это та, что ускользает от меня. Вот в чем проблема, вам дают число, и вы хотите вернуть это число умноженное на 3 и деленное на 16 с округлением до 0. Должно быть легко. Подвох? Вы можете использовать только! ~ & ^ | + << >> операторов и из них только комбинация из 12.

int mult(int x){
    //some code here...
return y;
}

Моя попытка была:

    int hold = x + x + x;
    int hold1 = 8;
    hold1 = hold1 & hold;
    hold1 = hold1 >> 3;
    hold = hold >> 4;
    hold = hold + hold1;
    return hold;

Но это не похоже на работу. Я думаю, что у меня проблема с потерей битов, но я не могу придумать, как их спасти. Другая перспектива была бы хороша. Просто добавьте, что вы также можете использовать только переменные типа int и без циклов, если можно использовать операторы или вызовы функций.

Прямо сейчас у меня есть номер 0xfffffff. Предполагается, что он возвращает 0x2ffffff, но возвращает 0x3000000.

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

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