Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无符号字符返回值和+=_C++ - Fatal编程技术网

C++ 无符号字符返回值和+=

C++ 无符号字符返回值和+=,c++,C++,当使用函数的返回结果和+=运算符时,我遇到了一个奇怪的问题。函数非常简单,一行从数组中获取无符号字符值。当我使用=运算符将其放入变量中时,值显示正确。但是,使用+=,值就变成了垃圾 这是我的密码: unsigned short value = 0; value = this->memory->get(address) << 8; //this will work value += this->memory->get(address) << 8;

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

这是我的密码:

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];
}
无符号短值=0;
value=this->memory->get(address)memory->get(address)memory[address];
}

我认为将值初始化为零可以解决这个问题;然而,事实并非如此。此外,将返回值转换为unsigned short仍然无法解决此问题。

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

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

我已尝试在移位前转换为无符号短字符,但没有luck@MooingDuck:UB解释了您需要的任何内容。这就是UB的全部要点。不过,演员可能会解决这个问题。我曾尝试在换班前用无签名的短剧演员luck@MooingDuck:UB解释了您需要的任何内容。这就是UB的全部要点。不过,演员阵容可能会解决这个问题。我可以想象,
值被分配到
+=
之前的某个地方。您是否使用了调试器?我可以想象,
值被分配到
+=
之前的某个位置。你有没有使用过调试器?