2014-09-24 141 views
-1

我看了几种不同的方式将二进制转换为JAVA中的整数。 但我想不通为什么这个工程?Java二进制到整数

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

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

感谢

+2

计算机上的所有内容都是二进制文件。当您将它打印到System.out时,它会将其转换为基数为10. – ControlAltDel 2014-09-24 18:43:19

+1

由于Java中没有二进制基元,因此没有转换; 'res'是一个'int'。 – azurefrog 2014-09-24 18:43:22

+1

一个'int'已经是一个32位有符号值,即它已经是二进制的,你不能改变它。任何除二进制以外的概念都只是为了让您的生活更轻松。 – 2014-09-24 19:10:55

回答

1

首先,让我们先澄清一些术语。你认为是一个整数实际上是base 10 notation中的一个数字,在Java的情况下是natural number,它使用从0到9(因此为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(记住执行快速乘法,即我们的数字系统的基础我们在这里处理)。

当您将该号码向右移一位时,您将执行除号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只是逐个向左移动。

0

res+= 1<<1;可以为res = res + 1<<1; 如果你把1<<1写这意味着1当你做一个右移成为00000000 00000000 00000000 00000010

这是0x000000022十进制值表示为0x00000001 = 00000000 00000000 00000000 00000001