十进制到八进制的按位转换

时间:2017-01-29 16:21:29

标签: bitwise-operators bit-shift

我不是在寻找任何类型的代码。一旦我理解了逻辑,我将自己编写代码,如何使用按位运算符将十进制数转换为八进制数。我知道使用乘法/除法会更容易,但我想使用按位运算符。

如果有人可以帮助我解决这个逻辑,那就非常感激。 (没有乘法或除法)

1 个答案:

答案 0 :(得分:1)

您正在寻求从基数10转换为基数8.最简单的方法是以二进制,基数2来思考。让我们假设您输入一个由变量存储的数字。您很可能在Base 10中输入此数字,但是当您尝试对存储值使用按位运算符时,它会将该数字视为基数2.此图像说明从基数2转换为基数10. {{3} }

注意前三位,它们相当于1,2和4,包括0这意味着前三位可以代表8个不同的数字。换句话说,二进制中的每三个数字代表八进制中的一个数字。这意味着小数点的前三个是你的第一个八进制数字,后三个是第二个,依此类推。作为示例,二进制中的71是1000111(或64 + 8 + 4 + 2 + 1),将其分成三个部分,给出二进制的111或者一个地方的7,二进制的000或者十位的0,以及001我们八进制数的数百位的二进制或十进制1。因此,十进制中的71将等于107。

Codewise你需要使用按位运算符来创建一个等于数字前3位的临时值。此临时值的值将在与您运行操作的次数相对应的位置(第一次单打,第二次数十次......)然后您需要将值右移三位。

但是,假设您在c中编码,如果您要做的只是以八进制打印出一个数字,请取出您的数字并使用%o代替printf函数中的%i。