当前位置:  开发笔记 > 编程语言 > 正文

获取字节中4个最低有效位(C++)的最快方法是什么?

如何解决《获取字节中4个最低有效位(C++)的最快方法是什么?》经验,为你挑选了3个好方法。

我在说这个:

如果我们有字母'A',十进制为77,十六进制为4D.我正在寻找获得D的最快方法.

我想到了两种方式:

给定x是一个字节.

    x << 4; x >> 4

    x %= 16

还有其他方法吗?哪一个更快?



1> Alnitak..:

简洁很好 - 解释更好:)

x &= 0x0f

当然,这是正确的答案.它完全表达了您想要实现的目标,并且在任何理智的架构上总是会编译为最小数量的指令(即1).只要将常量放在逐位运算符中,就要使用十六进制而不是十进制.

x <<= 4; x >>= 4

仅当你的'byte'是正确的无符号类型时才会起作用.如果它实际上是一个签名的字符,那么第二个操作可能会导致符号扩展(即你的原始位3也会出现在4-7位).

如果没有优化,这当然需要2条指令,但是在OSX上使用GCC,甚至-O1会将其减少到第一个答案.

x %= 16

即使没有启用优化器,您的编译器几乎肯定会在这里做正确的事情并将那个昂贵的div/mod操作转换为第一个答案.然而,它只能为两个权力做到这一点,而这种范式并没有使你想要实现的目标显而易见.



2> Terje Mikal..:

我总是用 x &= 0x0f



3> kauppi..:

有很多好的答案,其中一些在技术上是正确的.

在更广泛的范围内,人们应该理解C/C++不是汇编程序.程序员的工作是尝试告诉编译器你想要实现的目标.编译器将根据体系结构和各种优化标志选择最佳方法.

x&= 0x0F; 是告诉编译器你想要实现什么的最清晰的方法.如果在某些架构上上下移动速度更快,那么编译器的工作就是了解它并做正确的事情.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有