也许是一个愚蠢的问题,但我有一个C++应用程序,我经常这样做:
x & 0xff
其中x是32位整数。在进行AND操作时,将前导零也考虑在内是否会有性能优势?
x & 0x000000ff
我读到任何小于int类型的操作数在运算之前都会被提升为int类型。我猜这是编译器自动执行的优化,或者我在这里加前导零有助于MSVC做些什么吗?
也许是一个愚蠢的问题,但我有一个C++应用程序,我经常这样做:
x & 0xff
其中x是32位整数。在进行AND操作时,将前导零也考虑在内是否会有性能优势?
x & 0x000000ff
我读到任何小于int类型的操作数在运算之前都会被提升为int类型。我猜这是编译器自动执行的优化,或者我在这里加前导零有助于MSVC做些什么吗?
在您的源代码中添加这些零没有任何影响。它们将在词法分析阶段被移除,甚至在编译器完成解析代码之前就会被移除。它们不会影响代码生成。
编写以下代码:
#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
g++
。 - owacoder73 * 137
今天是否仍然等于昨天的10001一样 - 任何怀疑都是适得其反的。 - anatolyg
0x000000ff
和0xff
都是int
字面量,因此在类型和性能上没有区别。0x000000ff
可能会对编译器的性能产生几纳秒的影响或类似的影响。 - phuclv