Cra*_*lus -2 java bit-manipulation bit
可能是我太累了.
为什么以下不显示相同的值?
int x = 42405;
System.out.println(x << 8);
System.out.println((x &0x00ff) << 8);
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,较低的位应该是清楚的
编辑:好的,我将离开底部为后代...
如果x是int,则它非常简单:x << 8将具有相同的值,x & 0xff并且仅当没有设置"中间"16位时:
x左移的前8位将变为无关紧要x由掩蔽保留如果设置了任何 "中间"16位,那么x & 0xff将与x仍然由移位保留的位不同,因此结果将是不同的.
我不明白你为什么期望他们总是给出相同的结果......
我将假设它的类型x是byte,并且它实际上是负面的.
没有定义移位操作byte,所以首先有一个转换为int...而且根据你是否有掩码可以改变.
那么让我们来看看x-1 的情况.然后(int) x是还 -1 -即比特模式为全1.向左移动8位,最后得到24 1s的位模式,然后是8 0s:
11111111111111111111111100000000 = -256
Run Code Online (Sandbox Code Playgroud)
现在考虑第二行代码 - 正在采用x & 0xff,它只取得提升值的底部8位x- 即255.你将左移8位,你最终得到16 0s,8 1s,然后8 0s:
00000000000000001111111100000000 = 65280
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3136 次 |
| 最近记录: |