小编Mar*_*llo的帖子

无符号长位移位

我有位移和无符号长的问题.这是我的测试代码:

char header[4];
header[0] = 0x80;
header[1] = 0x00;
header[2] = 0x00;
header[3] = 0x00;

unsigned long l1 = 0x80000000UL;
unsigned long l2 = ((unsigned long) header[0] << 24) + ((unsigned long) header[1] << 16) + ((unsigned long) header[2] << 8) + (unsigned long) header[3];

cout << l1 << endl;
cout << l2 << endl;
Run Code Online (Sandbox Code Playgroud)

我希望l2也有2147483648的值,但它打印18446744071562067968.我假设第一个字节的位移会导致问题?

希望有人可以解释为什么这会失败以及我如何修改l2的计算以便它返回正确的值.

提前致谢.

c++ unsigned long-integer

8
推荐指数
1
解决办法
4243
查看次数

调试和预处理器指令

为了进行调试,我在应用程序中调用了许多调试日志函数.当然,在生产版本中,需要跳过这些调试调用.而不是写:

#if DEVEL == 1
    Log::debug(...);
#endif
Run Code Online (Sandbox Code Playgroud)

围绕调试函数的所有调用,我决定在调试函数本身中编写以下内容:

#if DEVEL != 1
    return;
#endif
Run Code Online (Sandbox Code Playgroud)

编译器是否会避免无用函数调用的开销,或者#if #endif出于性能原因使用(许多丑陋)构造我会更好吗?

c++ compiler-construction c-preprocessor

6
推荐指数
2
解决办法
1542
查看次数