使用函数的返回结果和+ =运算符时,我遇到了一个奇怪的问题。该函数非常简单,一行从数组中获取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也无法解决问题。
答案 0 :(得分:4)
无符号字符不足以在几乎每个平台上移位8位。这是未定义的行为,移位大于字节大小。