十进制到八进制的按位转换
Bitwise Conversion of Decimal to Octal
我不是在这里寻找任何类型的代码。我将自己编写代码,一旦我理解了逻辑,如何使用按位运算符将十进制数转换为八进制数。我知道使用 multiplication/division 会容易得多,但我想改用按位运算符。
如果有人能帮我解决逻辑问题,我将不胜感激。 (没有乘法或除法)
您希望将基数 10 转换为基数 8。完成此操作的最简单方法是以二进制、基数 2 进行思考。假设您输入了一个要由变量存储的数字。您很可能以 10 为基数输入此数字,但是当您尝试对存储的值使用按位运算符时,它会将数字视为以 2 为基数。此图解释了从 2 为基数到 10 为基数的转换。This image explains converting from base 2 to base 10.
注意前三位,它们相当于1、2、4,其中0表示这前三位可以代表8个不同的数字。换句话说,二进制中每三位代表八进制中的一位。这意味着小数点后的前三个是您的第一个八进制数字,后三个是第二个,依此类推。例如,二进制的 71 是 1000111(或 64+8+4+2+1),将其分成三个部分给出二进制的 111 或个位的 7,二进制的 000 或十位的 0,以及 001二进制或十进制的 1 作为我们八进制数的百位。因此,十进制的 71 等于 107。
在代码方面,您需要使用按位运算符来创建一个等于数字前 3 位的临时值。这个临时值的值将在对应于你有多少次操作的地方运行(第一次单打,第二次十次等......)然后你会想要将值右移三位。
但是,假设您使用 c 语言进行编码,如果您只想以八进制打印出一个数字,请使用您的数字并在 printf 函数中使用 %o 代替 %i。
我不是在这里寻找任何类型的代码。我将自己编写代码,一旦我理解了逻辑,如何使用按位运算符将十进制数转换为八进制数。我知道使用 multiplication/division 会容易得多,但我想改用按位运算符。
如果有人能帮我解决逻辑问题,我将不胜感激。 (没有乘法或除法)
您希望将基数 10 转换为基数 8。完成此操作的最简单方法是以二进制、基数 2 进行思考。假设您输入了一个要由变量存储的数字。您很可能以 10 为基数输入此数字,但是当您尝试对存储的值使用按位运算符时,它会将数字视为以 2 为基数。此图解释了从 2 为基数到 10 为基数的转换。This image explains converting from base 2 to base 10.
注意前三位,它们相当于1、2、4,其中0表示这前三位可以代表8个不同的数字。换句话说,二进制中每三位代表八进制中的一位。这意味着小数点后的前三个是您的第一个八进制数字,后三个是第二个,依此类推。例如,二进制的 71 是 1000111(或 64+8+4+2+1),将其分成三个部分给出二进制的 111 或个位的 7,二进制的 000 或十位的 0,以及 001二进制或十进制的 1 作为我们八进制数的百位。因此,十进制的 71 等于 107。
在代码方面,您需要使用按位运算符来创建一个等于数字前 3 位的临时值。这个临时值的值将在对应于你有多少次操作的地方运行(第一次单打,第二次十次等......)然后你会想要将值右移三位。
但是,假设您使用 c 语言进行编码,如果您只想以八进制打印出一个数字,请使用您的数字并在 printf 函数中使用 %o 代替 %i。