Использование побитовой операции для умножения на 3 - PullRequest
3 голосов
/ 31 октября 2019

Очень простой вопрос, который сбивает меня с толку: напишите функцию, которая производит то же самое, что и это:

int mult_3_div_4(int x){return (x*3)/4;}

Но только используя! ~ & + << >> побитовые операторы

Делить на 4, конечно, << 2 Итак, я попробовал что-то вроде: </p>

int test(int x) {return ((x<<1 + x) >> 2);}

Но я не могукажется, найти что-нибудь, что соответствует x * 3, используя побитовые операторы

1 Ответ

6 голосов
/ 31 октября 2019

Битовые сдвиги << >> имеют меньший приоритет, чем двоичные операторы + -.

Таким образом, строка должна быть ...

int test(int x) {return ((x<<1) + x) >> 2;}
...