fel*_*ipe 1 c c++ java bit-manipulation
我构建了这个程序,对三个数字进行一些按位操作:2,4和20:
public static void main(String[] args) {
int mask = 63;
int id = 2;
id = (id << 6) | 4;
id = (id << 6) | 20;
int v3 = id & mask;
int v2 = (id >> 6) & mask;
int v1 = (id >> 6*2) & mask;
System.out.println(v1 + " " + v2 + " " + v3);
}
Run Code Online (Sandbox Code Playgroud)
我毫不怀疑按位操作,但我不知道这是否是最好的方法.有更优雅的方式进行这些操作吗?
Aln*_*tak 11
我假设你的意图是将三个六位值打包成一个int,在这种情况下:
public int pack(int v1, int v2, int v3) {
return (v3 & 0x3f) << 0 |
(v2 & 0x3f) << 6 |
(v1 & 0x3f) << 12;
}
public void unpack(int n) {
int v3 = (n >> 0) & 0x3f;
int v2 = (n >> 6) & 0x3f;
int v1 = (n >> 12) & 0x3f;
// do stuff with v1, v2, v3
}
Run Code Online (Sandbox Code Playgroud)
它的功能与你的代码大致相同,说实话,但我希望意图更加清晰.
在<< 0与>> 0操作应该由编译器被优化掉,但显示了"对称"