旋转:设置哪一位?

我有一个设置为1位的64位无符号整数。我想为每个可能的64个值分配一个值(在这种情况下,为奇质数,因此0x1对应于3,0x2对应于5,...,0x8000000000000000对应于313)。

似乎最好的方法是将1-> 0,2-> 1,4-> 2,2,8-> 3,...,2 ^ 63-> 63转换为数组中的值。但是,即使是这样,我也不知道获得二进制指数的最快方法是什么。而且可能还有更快/更好的方法。

此操作将使用10 14到10 16次,因此性能是一个严重的问题。


元芳怎么了
浏览 485回答 3
3回答

婷婷同学_

您可以使用二进制搜索技术:int pos = 0;if ((value & 0xffffffff) == 0) {     pos += 32;     value >>= 32;}if ((value & 0xffff) == 0) {     pos += 16;     value >>= 16;}if ((value & 0xff) == 0) {     pos += 8;     value >>= 8;}if ((value & 0xf) == 0) {     pos += 4;     value >>= 4;}if ((value & 0x3) == 0) {     pos += 2;     value >>= 2;}if ((value & 0x1) == 0) {     pos += 1;}与循环相比,这样做的优势在于循环已经展开。但是,如果这确实对性能至关重要,则您将需要测试和衡量每个建议的解决方案。
打开App,查看更多内容
随时随地看视频慕课网APP