問題タブ [armcc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - この ARM CMSIS の例で二重キャストを使用するのはなぜですか?
IRQn(((uint32_t)(int32_t)IRQn) >> 5UL)
は -14 から 81 までの範囲の列挙型です。
私が見る限り、最初に int32_t にキャストされ、次に uint32_t にキャストされます。その後、左にシフトします。最後に、(与えられたコード例の外で) 配列インデックスとして使用されます。
テストとして、次のコードを作成し、同じコンパイラでコンパイルしました。
私が見る限り、4 つの数字はすべて末尾が同じ 2 進値になっています。((uint32_t)IRQn)
これは、キャストとしても機能しただろうと私に信じさせます。
では、キャストを 2 回行う必要がある他の理由はありますか?