Java中的按位运算与类似的代码给出不同的值?

时间:2018-04-11 18:50:37

标签: java bitwise-operators

简短的问题。我在Java中进行位/字节操作时很新,但我发现了一些奇怪的东西。

以下代码作为输出:

ID |Identifier1 | Identifier2 
---------------------------------
1  |      a     | c         
2  |      b     | f         
3  |      a     | g         
4  |      c     | h        
5  |      b     | j         
6  |      d     | f         
7  |      e     | k  
8  |      i     |          
9  |      l     | h   

代码:

Identifier | Gr_ID    |    Gr.Members                 
---------------------------------------------------
a          |   1      |   (a,c,g,h,l)  
b          |   2      |   (b,d,f,j)       
c          |   1      |   (a,c,g,h,l)  
d          |   2      |   (b,d,f,j)       
e          |   3      |   (e,k)                 
f          |   2      |   (b,d,f,j)       
g          |   1      |   (a,c,g,h,l)  
h          |   1      |   (a,c,g,h,l)  
j          |   2      |   (b,d,f,j)       
k          |   3      |   (e,k)                 
l          |   1      |   (a,c,g,h,l)  
i          |   4      |   (i)  

为什么,即使在第5行和第7行代码中为索引赋值的操作相同,该索引也有不同的值?

就像我说的,我是按位/字节操作的新手,所以我可能会遗漏一些背景信息。

2 个答案:

答案 0 :(得分:0)

index的第一个分配发生在这里的括号中:

in = (nodes[(index = nodes.length - 1) & hash]) != null;

哪个是

index = nodes.length - 1

并且值为"两个"。你的第二个任务(index = (nodes.length - 1) & hash;)有所不同;您添加了一个& hash,大概有两位0,因此当您执行按位&时,它变为0

答案 1 :(得分:0)

(index = nodes.length - 1) & hash

nodes.length - 1分配给index,然后将其与hash进行按位分配。

index = (nodes.length - 1) & hash

使用nodes.length - 1按位hash,然后将结果分配给index

不一样。