Java 用什么最有效(也是最安全)的方法来替换长字符的最后一个数字?
将Java 用什么最有效(也是最安全)的方法来替换长字符的最后一个数字?,java,bit-manipulation,long-integer,Java,Bit Manipulation,Long Integer,将长(由System.currentTimeInMillis()实际生成为时间戳)的最后一位(最低有效位)替换为其他数字的最有效(也是最安全)方法是什么 或者,有没有更好的方法通过使用位运算将任何固定附件附加到它的末尾?如果这不是一个假设性的问题,即找到一个快速算法进行检查,那么请忽略此答案。正确的方法(如前所述)是做(somelong/10)*10+newvalue 一种更快(假设)的方法可能是使用一些二维调整值数组 整数[]调整=新整数[16][10] 其中,第一个数组索引表示当前值与0x0
长
(由System.currentTimeInMillis()实际生成为时间戳)的最后一位(最低有效位)替换为其他数字的最有效(也是最安全)方法是什么
或者,有没有更好的方法通过使用位运算将任何固定附件附加到它的末尾?如果这不是一个假设性的问题,即找到一个快速算法进行检查,那么请忽略此答案。正确的方法(如前所述)是做(somelong/10)*10+newvalue 一种更快(假设)的方法可能是使用一些二维调整值数组 整数[]调整=新整数[16][10] 其中,第一个数组索引表示当前值与0x0F(最后4位)的和 第二个数组索引将是您想要的新数字 该值是对变量的调整 所以代码应该是 newLong=somelong+adjustment[somelong&0x0F][您想要什么\u新数字] 所以没有乘法或除法 例如,假设输入数字是22,您希望它是26 26是011010,因此26&0x0F是底部4位1010,即10 调整[10][6]=4(您已预先计算为4) 所以你有22+4=26
显然,索引10与索引0、索引11、索引1等相同。在您的评论中,您说二进制数字或十进制数字都可以。由于Andrew发布了十进制版本,我发布了二进制版本,您希望在其中替换2个ls位: 以下程序介绍了4种可能性,您可以使用这些可能性替换2个ls位并生成输出:
9999999999999999
9999999999999996
9999999999999997
9999999999999998
9999999999999999
代码:
你说的是二进制数字还是十进制数字?两者都对我有好处。。如果替换二进制,那么我想替换2位,如果是十进制,则只替换1位。
public class A {
public static void main(String[] args) {
long aLong = 9999999999999999L;
System.out.println(aLong);
long aLong2 = aLong & ~3 + 0;
System.out.println(aLong2);
aLong2 = aLong & ~3 + 1;
System.out.println(aLong2);
aLong2 = aLong & ~3 + 2;
System.out.println(aLong2);
aLong2 = aLong & ~3 + 3;
System.out.println(aLong2);
}
}