Побитовое преобразование десятичного числа в восьмеричное
Я не ищу никаких кодов здесь. Я сам напишу код, как только пойму логику, как преобразовать десятичное число в восьмеричное, используя побитовые операторы. Я знаю, что было бы намного проще использовать умножение / деление, но вместо этого я хочу использовать побитовые операторы.
Очень признателен, если кто-то может помочь мне с логикой. (Нет умножения или деления)
1 ответ
Вы хотите преобразовать из базы 10 в базу 8. Самый простой способ сделать это - думать в двоичном формате, база 2. Предположим, вы вводите число, которое будет храниться в переменной. Скорее всего, вы вводите это число в Base 10, однако, когда вы пытаетесь использовать побитовые операторы для сохраненного значения, оно будет обрабатывать число, как если бы оно было Base 2. Это изображение объясняет преобразование из базы 2 в основание 10. Это изображение объясняет преобразование от базы 2 до базы 10.
Обратите внимание на первые три бита, они эквивалентны 1, 2 и 4, включая 0, это означает, что эти первые три цифры могут представлять 8 различных чисел. Другими словами, каждые три цифры в двоичном коде представляют одну цифру в восьмеричном. Это означает, что первые три из десятичной точки - это ваша первая восьмеричная цифра, вторые три - это вторая и так далее, и так далее. Например, 71 в двоичном виде - это 1000111 (или 64+8+4+2+1), разделив его на три части, получим 111 в двоичном или 7 для одного места, 000 в двоичном или 0 для десятки и 001 в двоичное или 1 в десятичном виде для сотен нашего восьмеричного числа. Таким образом, 71 в десятичной будет равна 107.
В коде вам нужно будет использовать побитовые операторы для создания временного значения, равного первым 3 цифрам числа. Значение этого временного значения будет находиться в месте, соответствующем тому, сколько раз вы выполняли операцию (первый раз синглы, второй раз десятки и т. Д.), Затем вам нужно будет сдвинуть значение вправо на три позиции.
Однако при условии, что вы используете код c, все, что вам нужно - это распечатать восьмеричное число, взять ваш номер и использовать%o вместо%i в функции printf.