2012-03-26 2 views
0
の問題

関数の戻り値と+ =演算子を使用すると、私は奇妙な問題を抱えています。関数は非常に単純で、配列からunsigned char値をフェッチする1行です。 =演算子を使用して変数に配置すると、値が正しく出力されます。しかし、+ =を使用すると、その値はガベージになります。ここで符号なしの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]; 
} 

Iがゼロに値を初期化しても問題が解決するだろうと考え出しました。しかし、それはしません。また、リターンを符号なしのshortにキャストしても、それを解決することはできません。

+0

私は 'value 'が' + = 'の前のどこかに割り当てられていると思います。あなたはデバッガを使いましたか? –

答えて

4

unsigned charは、ほとんどすべてのプラットフォームで8ビットシフトするには十分ではありません。これは、バイト・サイズよりも大きくシフトする未定義の動作です。

+0

私は運がないシフトの前にunsigned shortにキャストしようとしました –

+0

@MooingDuck:UBはあなたが必要とするものを何でも説明します。それがUBの全ポイントです。しかし、キャストはおそらくそれを修正するだろう。 – Puppy

関連する問題