我想生成64位长的int作为文档的唯一ID。
一个想法是将用户的ID(32位int)与Unix时间戳(另一个32位int)组合,形成一个唯一的64位长整数。
缩小的例子是:
合并两个4位数字0010
和0101
以形成8位数字00100101
。
答案 0 :(得分:15)
将第一个数字左移第二个数字中的位数,然后在第二个数字中添加(或按位OR - 将+
替换为|
)第二个数字。
result = (user_id << 32) + timestamp
关于缩小的示例,
>>> x = 0b0010
>>> y = 0b0101
>>> (x << 4) + y
37
>>> 0b00100101
37
>>>
答案 1 :(得分:5)
foo = <some int>
bar = <some int>
foobar = (foo << 32) + bar
答案 2 :(得分:4)
这应该这样做:
(x << 32) + y
答案 3 :(得分:2)
对于下一个人(在这种情况下,我就是我)。以下是一种常规方法(对于按比例缩小的示例):
def combineBytes(*args):
"""
given the bytes of a multi byte number combine into one
pass them in least to most significant
"""
ans = 0
for i, val in enumerate(args):
ans += (val << i*4)
return ans
对于其他尺寸,将4改为32或其他。
>>> bin(combineBytes(0b0101, 0b0010))
'0b100101'
答案 4 :(得分:0)
在此之前的所有答案都没有涉及合并和拆分数字。拆分和合并一样有必要。
for ($i = 0; $i < count($result); $i++)
{
for ($x = 0; $x < $result[$i][$x]; $x++)
{
// code...
$data = $result[$i][$x];
echo '
<div class="col-6">
<div class="res-cont">
<div class="count">' . ($x + 1) . '</div>
<h4>' . $data['title'] . '</h4>
<p>' . $data['meta'] . '</p>
<span>' . $data['url'] . '</span>
</div>
</div>
';
}
}