__lzcnt returns 31 -(前导零的数量)

__lzcnt returns 31 - (# of leading zeros)

我 运行 使用 64 位 windows 7,使用 VS 2015。与文档相反

https://msdn.microsoft.com/en-us/library/bb384809.aspx

__lzcnt() 返回 31 -(前导零计数)。

即 __lzcnt(2) = 1;

这是已知错误吗?还是我遗漏了什么?

问题是这样的:lzcnt 指令在不支持它的处理器上执行时不会产生异常。相反,处理器将 lzcnt 编码视为 BSR(反向位扫描),然后忽略前缀值 F3。因此,您的代码在某些处理器上执行 BSR,在其他处理器上执行 LZCNT。解决方法是在运行时确认处理器是否真的支持LZCNT指令。