繁体   English   中英

C ++十六进制表示法和按位运算符性能

[英]C++ Hexadecimal notation and bitwise operators performance

可能是一个愚蠢的问题,但我有一个C ++应用程序,我经常这样做:

x & 0xff

其中x是32位整数。 将前导零也放入是否有任何性能优势,所以它是两个32位数之间的AND运算?

x & 0x000000ff

我读到在评估操作之前,任何小于int的操作数都将被提升为int。 我想这是一个优化编译器自动完成的,或者我是否通过将那些前导零置于那里来帮助MSVC?

将这些零添加到源代码中绝对没有区别。 在编译器完成解析代码之前,它们已在lexing阶段被删除。 它们不会影响代码生成。

写这段代码:

#include <iostream>

int main()
{
    int x = 400;
#ifdef SHORT
    std::cout << (x & 0xFF) << std::endl;
#else
    std::cout << (x & 0x000000FF) << std::endl;
#endif
    return 0;
}

使用和不使用-DSHORT进行编译:

g++ -std=c++11 -DSHORT main.cpp -o test_short

g++ -std=c++11 main.cpp -o test_long

差异生成的可执行文件,它们完全相同(使用和不使用-O3选项进行测试)。

因此g ++编译器正确处理这个问题,在编写代码时不需要处理这个问题(添加零对生成的代码没有任何影响)。 我没有MSVC,但您可以进行完全相同的测试并检查输出是否不同!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM