如何将二进制转换为十进制和八进制?

How to convert Binary to Decimal and Octal?

我有一个二进制数,我想将其转换为十进制和八进制。

(0100 1111 1011 0010)2

我知道如何将它转换成小数。但是这个问题让我感到困惑。因为每4位中间有一个space "0101 1111" 你能帮助我如何理解这个问题吗?

谢谢

space 只是为了便于阅读。如果您尝试将其转换为十六进制,则特别好,因为 4 个二进制数字组成一个十六进制数字。

空格不是数字的一部分,只是为了让人们更容易阅读。从二进制到八进制的转换很简单。将二进制数字分成 3 组(从右到左,向最左边的组添加额外的 0,然后分别转换每个组。您的示例:

0100 1111 1011 0010 -> 100 111 110 110 010 -> 47662

首先,这些空格是为了便于阅读;只需删除它们。其次,如果这不是计算机程序,只需打开 windows 计算器,去查看,然后 select 程序员。然后选择 bin 单选按钮并输入您的号码。 qword 单选按钮应 selected。如果是一个程序,我需要知道用什么语言来帮助你。

首先,确保您要转换为十进制和八进制的数字实际上是 'Binary' 而不是 'Binary Coded Decimal (BCD)'。通常当数字被分组为 4 个二进制数字时,它代表 BCD 而不仅仅是二进制。

所以,一旦你确定它实际上是二进制而不是 BCD,转换为十进制和八进制都是简单的步骤。

对于二进制到八进制,您将二进制数分成 3 位数字组,从最低有效位(LSB 或最右边)开始到最高有效位(MSB 或最左边)。如果无法在 MSB 处形成一组 3 位数字,则添加前导零。

现在将每组数字从二进制转换为八进制:

(000) -> 0 (001) -> 1 . . (111) -> 7

最后把数字放在一起,然后你就把二进制转换成了八进制。

例如:- 二进制 - 00101101 分成 2 组: -> 000 101 101 -> 0 5 5 -> 55

“二进制编码的十进制”和 'Binary' 之间的区别:

对于十进制数1248 二进制文件就是 10011100000 但是,BCD 将是 -> 0001 0010 0100 1000

要非常快速地将八进制转换为十进制,有两种方法。您实际上可以在 bitshift 中进行实际计算。在编程中,你应该做位移位。

Example octal number = 147

Method one: From left to right.
Step 1: First digit is one. Take that times 8 plus 4. Got 12.
Step 2: Take 12 times 8 + 7. Got 103, and 103 is the answer.

最终您可以使用方法一将任何基数转换为基数 10。

方法一是从左到右读取字符串。制作一个用于计算的结果容器。当您读取第一个最左边的数字时,您将其添加到结果值中。每次读取一个新数字时,将结果值乘以数字的基数(对于八进制,即 8),然后将新数字的值添加到结果中。

Method 2, bitshift:
Octal Number: 147.

Step 1: 1 = 1(bin) = Shift << 3 = 1000(result value)
Step 2: 4 = 100(bin) + 1000(result value) = 1100(result value)
Step 3: 1100(result value) Shift << 3 = 1100000
Step 4: 7 = 111(bin) + 1100000(result value) = 1100111
Step 5: 1100111 binary is 103 decimal.

在编程循环中,您可以执行如下操作,速度快如闪电。代码非常简单,可以转换成任何编程语言。请注意,没有任何错误检查。

 for ( int i = 0; i < length; i++ ){
     c = (str.charAt(i) ^ 48);
     if ( c > 7 ) return 0; // <- if char ^ 48 > 7 then that is not a valid octal number.
     out = (out << 3) + c;
 }