【问题标题】:Issues with unsigned char return value and +=unsigned char 返回值和 += 的问题
【发布时间】:2012-04-10 11:57:18
【问题描述】:

在使用函数的返回结果和 += 运算符时,我遇到了一个奇怪的问题。该函数非常简单,一行代码从数组中获取一个 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];
}

我认为将值初始化为零可以解决问题;但是,事实并非如此。此外,将 return 转换为 unsigned short 仍然不能解决它。

【问题讨论】:

  • 我想value 被分配到+= 之前的某个地方。你有调试器吗?

标签: c++


【解决方案1】:

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

【讨论】:

  • 我曾尝试在轮班前强制转换为 unsigned short,但没有成功
  • @MooingDuck:UB 解释了你需要的任何东西。这就是UB的全部意义所在。不过,演员阵容可能会解决这个问题。
猜你喜欢
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 2016-04-04
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多