unsigned char返回值和+ =的问题

时间:2012-03-26 23:19:36

标签: c++

使用函数的返回结果和+ =运算符时,我遇到了一个奇怪的问题。该函数非常简单,一行从数组中获取unsigned char值。当我使用=运算符将其放入变量时,该值正确。但是,使用+ =,该值变为垃圾。

这是我的代码:

unsigned short value = 0;

value = this->memory->get(address) << 8; //this will work
value += this->memory->get(address) << 8; //this will set it to 52480 every time

unsigned char Memory::get(unsigned int address)
{
    return this->memory[address];
}

我认为将值初始化为零可以解决问题;但事实并非如此。此外,将返回值转换为无符号的short也无法解决问题。

1 个答案:

答案 0 :(得分:4)

无符号字符不足以在几乎每个平台上移位8位。这是未定义的行为,移位大于字节大小。