找到Swift中最重要的部分

时间:2017-05-08 20:36:34

标签: swift bit-manipulation

我需要在Swift中找到整数most significant bit (MSB)的值(或位置)。

例如:

  • 输入数字: 9
  • 以二进制形式输入: 1001
  • MS 为二进制: 1000 - > (十进制为8)
  • MS 位置为十进制: 3(因为1<<3 == 1000

许多处理器(英特尔,AMD,ARM)都有此说明。在c中,these are exposed。这些说明是否在Swift中通过库函数可用,或者我需要implement some bit twiddling

在我的情况下,该值更有用。

如果返回一个位置,则可以通过一次移动轻松获得该值。

相反,除非有快速Hamming Weight / pop count功能,否则从价值计算位置并不容易。

1 个答案:

答案 0 :(得分:3)

您可以使用flsl()功能(&#34;查找最后设置位,长&#34;):

let x = 9
let p = flsl(x)
print(p) // 4

结果为4,因为flsl()和相关函数将从1开始的位编号为最低有效位。

在英特尔平台上,您可以使用_bit_scan_reverse内在的, 在我在macOS应用程序中的测试中,这转换为BSR 指令。

import _Builtin_intrinsics.intel

let x: Int32 = 9
let p = _bit_scan_reverse(x)
print(p) // 3