1

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

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

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

int a=0, b=0, c=0, d=0;

a=-5;
b=(int32_t)a;
c=(uint32_t)b;
d=(uint32_t)a;

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

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

4

0 に答える 0