我想要将当前时间戳插入多个类型BigInt
中。 BigInt中的所有内容都应该向左移动,以便为时间戳腾出空间。但是,应忽略时间戳的前导零。
我现在正在做的事情:
val number: BigInt = ...
val time = System.currentTimeMillis
val usedBits = 64 - java.lang.Long.numberOfLeadingZeros(time )
val newNumber = (number << usedBits) | t
有更好的方法吗?特别是第三行看起来并不是很优雅。
答案 0 :(得分:0)
我不确定我是否遵循了什么/为什么你要使用BigInt进行转换,但你可以使用字符串来定义BigInts,这可能会让你更接近你想要的。
例如你有:
val number:BigInt = 999 // guessed a number
val time = System.currentTimeMillis // results in Long = 1465400383430
val usedBits = 64 - java.lang.Long.numberOfLeadingZeros(time) // results in Int = 41
val newNumber = (number << usedBits) | time // results in BigInt = 2198289632679878
您可以改为将最后一行更改为:
val newNumber2 = BigInt( number.toString + time.toString ) // BigInt = 9991465400383430
深入研究差异(它只有3位):
newNumber.bitLength
= 51
newNumber2.bitLength
= 54
和二进制文件
newNumber.toLong.toBinaryString
= " 111110011110101010100110000101010110101011111000110"
newNumber2.toLong.toBinaryString
= "100011011111110010111101010001111110011011011111000110"
直到今天,我还没有考虑过使用BigInt打包。但至少在这种情况下,它可以很好地完成工作,如果您使用第二种方法作为奖励,并且如果您知道数字字符串的长度,则可以轻松提取值。酷: - )