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);


}
}