c++ - 回答练习面试问题

标签 c++ long-integer

我只是通过一堆 C++ 面试问题来确保没有什么明显的我不知道。到目前为止,我还没有发现任何我不知道的东西,除了这个:

long value;
//some stuff
value &= 0xFFFF;

问题是“这段代码有什么问题?”并暗示这与目标架构有关。

除非答案只是“值未初始化”,否则我看不出有任何问题。据我所知,它只是屏蔽了值的 2 个最低有效字节,而 long 保证至少是 2 个字节,所以那里没有问题。

可能是 long 在目标架构上可能只有 2 个字节,而您可能会丢失符号位?或者也许 0xFFFF 是一个 intint 只有 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/

相关文章:

c++ - 成员变量在评估之前未正确更新

c++ - 如何在 Eigen 库中获取矩阵的秩?

c++ - 如何在 ANSI C 中 malloc 字符串数组?

c - 无法解决此错误 "Access violation"

java - 将日期插入sqllite时将字符串日期转换为long的原因是什么?

java - Long + Long 不大于 Long.MAX_VALUE

c++ - 阻止代码处理的宏

c++ - Ubuntu下如何用FLTK编译

C 编程 - 整数/长整型到字符串表示

c# - 长到小数点,小数点在特定位置