__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指令。
我 运行 使用 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指令。