我只是通过一堆 C++ 面试问题来确保没有什么明显的我不知道。到目前为止,我还没有发现任何我不知道的东西,除了这个:
long value;
//some stuff
value &= 0xFFFF;
问题是“这段代码有什么问题?”并暗示这与目标架构有关。
除非答案只是“值未初始化”,否则我看不出有任何问题。据我所知,它只是屏蔽了值的 2 个最低有效字节,而 long
保证至少是 2 个字节,所以那里没有问题。
可能是 long
在目标架构上可能只有 2 个字节,而您可能会丢失符号位?或者也许 0xFFFF 是一个 int
而 int
只有 2 个字节?
提前致谢。
最佳答案
此代码的问题在于它对有符号值执行按位运算。对于不同的整数表示,对负值进行此类运算的结果差异很大。
例如考虑以下程序:
#include <iostream>
int main(void)
{
long value;
value = -1; // Some stuff
value &= 0xffff;
std::cout << "Value = " << value << std::endl;
}
在二进制补码架构上,结果是:
Value = 65535
在一个补码架构上,结果是:
Value = 65534
在符号和幅度架构上,结果是:
Value = 1
关于c++ - 回答练习面试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2359626/