Discuss / 编程 / 关于位运算

关于位运算

Topic source

Yanlun0323

#1 Created at ... [Delete] [Delete and Lock User]
return ((epochSecond - OFFSET) << 21) | (next << 5) | shardId;

这里的-OFFSET、<<21 、<< 5 、| shardId这些操作符为什么需要这么写?一直没搞懂,今天读了廖老师的博客,受益良多!!

以下是我的理解:

这里的<<5,应该是最后的shardId占用了;右移21位,这里会需要加上next右移的5位,实际上next占用了16位;那么16位最高能够容纳1 << 16 = 65536个序列;

也就是说同一秒最高支持6.5W个序列生成;


  • 1

Reply