問題タブ [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.

0 投票する
0 に答える
39 参照

c - この ARM CMSIS の例で二重キャストを使用するのはなぜですか?

IRQn(((uint32_t)(int32_t)IRQn) >> 5UL)は -14 から 81 までの範囲の列挙型です。

私が見る限り、最初に int32_t にキャストされ、次に uint32_t にキャストされます。その後、左にシフトします。最後に、(与えられたコード例の外で) 配列インデックスとして使用されます。

テストとして、次のコードを作成し、同じコンパイラでコンパイルしました。

私が見る限り、4 つの数字はすべて末尾が同じ 2 進値になっています。((uint32_t)IRQn)これは、キャストとしても機能しただろうと私に信じさせます。

では、キャストを 2 回行う必要がある他の理由はありますか?