为了好玩,我一直在用Java实现DES算法。 (嗯,实际上并不是那么有趣)。 在该算法中,您处理64位数据块,我想:嘿,这很完美,让我们使用“ long”存储我的二进制数据。
然后我遇到了严重的麻烦,使我大为恼火:假设您建立了一个很长的数据库,就像这样:
long value = 785537;
假设您要将值的最高有效位设置为1,则需要执行以下操作:
value |= 0x8000000000000000l;
很简单吧? 但这根本不起作用。 Java可以轻松更改其他内容,这意味着
value |= 0x7000000000000000l;
将工作。 但是,如果这是最重要的一点,它将无法正常工作。
为什么呢 有什么方法可以实现我想要的吗?
预先感谢您的回答。
编辑:
这是我编写的代码示例,以二进制形式显示long:
public static void printBits(long input){
StringBuilder builder = new StringBuilder();
for(int i = 0; i < 64; i++){
if((input & (0x1l << i)) != 0){
builder.append('1');
} else {
builder.append('0');
}
}
System.out.println(builder);
}
如果我这样做:
long val = -1;
printBits(val);
它将按预期的那样打印“ 111111111111111111111111111111111111111111111111111111111111010”。 如果我然后键入:
val |= Long.MIN_VALUE;
printBits(val);
要么
val |= 0x8000000000000000l;
printBits(val);
还在打印“ 1111111111111111111111111111111111111111111111111111111111111110” ...
如果是,请进行以下测试:
(val & 8000000000000000l) != 0;
错了