Java二进制到整数

时间:2014-09-24 18:39:36

标签: java

我在JAVA中看了几种不同的方法将二进制转换为整数。 但我无法弄清楚为什么会这样有效?

int res = 0;
res += 1 << 1;

res结果为2,我知道它向左移1位,在二进制中变为10。但是我混淆了它如何从二进制转换为整数,我想知道机制。

由于

2 个答案:

答案 0 :(得分:1)

首先,让我们首先澄清一些术语。您认为是整数的实际上是base 10 notation中的数字,在Java的情况下是natural number,使用从0到9的10位数表示(因此基数为10)。

binary notation中,我们只处理两位数来代表所有自然数。二进制(基数2)和十进制数(基数10)都是整数。

数字移位是乘以或除以数字的基数

您可以使用您已熟悉的10号基数轻松解释您观察到的位移效应。想象一下,你有一个预先填充0 s的方形区域。在每个字段中,您可以写入0到9之间的数字,并假设这些字段称为“”。您将数字7写入与右侧对齐的条带中:

0|0|0|0|0|7

想象一下整个条带现在代表整数7。有效地进行的位移是将该条中的那些数字向左或向右移动,同时用0 s填充先前占用的点。想象一下,我们正在将7向左移动一个位置:

0|0|0|0|7|0

通过将数字向左移动,我们实际上快速乘以10(记住,这是我们在这里处理的数字系统的 base )。

当您将该数字向右移动一个点时,您会按10执行除法。

位移是乘法或除以2

这同样适用于二进制数,这是计算机中数字的主要存储格式。二进制数字仅由两位数字组成,即1和0。

快速查看下表,以便更好地理解二进制数:

+-------------------+
| Decimal | Binary  |
+---------+---------+
| 0000001 | 0000001 |
| 0000002 | 0000010 |
| 0000003 | 0000011 |
| 0000004 | 0000100 |
| 0000005 | 0000101 |
| 0000006 | 0000110 |
| 0000007 | 0000111 |
| ...     | ...     |
+---------+---------+

当我们将条带中的数字向左移动时,我们执行乘法2,当我们将数字向右移动时,我们执行2的除法。只需查看表格,然后查找十进制数字1.将其乘以2并查看二进制表示。再将其乘以2(十进制4)并查看二进制表示法。由于乘以2,二进制数字1一个接一个地向左移动。

答案 1 :(得分:0)

res+= 1<<1;可写为res = res + 1<<1; 如果您采用1<<1,则表示1表示为0x00000001 = 00000000 00000000 00000000 00000001  当你进行右移时,它变为00000000 00000000 00000000 00000010

0x00000002,其小数值为2