В C мне дают int x
, и я должен использовать только следующие побитовые и логические операторы для умножения x
на 2: << >> ~ | ^ &
.Операторы + and *
специально запрещены.
Обычно это было бы легко, как я мог бы просто сделать x << 1
.Тем не менее, цель этой проблемы состоит в том, чтобы предположить, что этот x содержит значение с точностью до float
.
Я считаю, что смысл притворяться, что x
является float
, состоит в том, чтобы побудить нас задуматься о числах с плавающей запятой и о том, как правильно их умножить, применяя ранее упомянутые сдвиги и логические операторы.
Когда речь идет о смещении значений с плавающей запятой, мое текущее понимание состоит в том, что биты с плавающей запятой могут быть искажены при сдвиге.Это правильно?Если нет, то почему?В противном случае, мое понимание верно, и я застрял на том, как это осуществить.Любая помощь будет принята с благодарностью!