私はArduino 2560 MegaのC++ライブラリを開発しています。興味深いバグを発見しました。Arduinoのビットシフトエラー
uint8_t resolution = 15;
uint32_t numDiscreteLevels = (1 << resolution); //yields a value of 0xFFFF8000
uint32_t numDiscreteLevels = ((uint32_t)1 << resolution); //yields 0x8000 (correct value)
最初の行では、符号付きビットが変数に代入される前に値にパディングされているようです。プロモーションルールによると、私は1が符号なし整数にキャストされるべきだと考えます。しかし、それでも、あなたは左にシフトするときにのみ、署名された詰め物が発生すると思った。
ありがとう! –