質問Bitshift と整数の昇格に似ていますか? 、左ビットシフトを使用する場合の整数昇格について質問があります。
unsigned int test(void)
{
unsigned char value8;
unsigned int result;
value8 = 0x12;
result = value8 << 8;
return result;
}
この場合、value8 は最初に unsiged int にプロモートされますか、それとも実装固有ですか?
6.5.7 ビット単位のシフト演算子... 3 セマティクス ...
整数昇格は各オペランドで実行されます。結果の型は、昇格された左オペランドの型です。右オペランドの値が負の値であるか、プロモートされた左オペランドの幅以上である場合、動作は未定義です。
「整数の昇格は各オペランドで実行されます」と書かれています。、しかし、ここで昇格ルールは何ですか?
あるべきだとconvert to int if lesser rank than int
思いますが、見つかりません。
1 つのコンパイラ (Renesas nc30wa) は int に昇格しないので、これを尋ねます。そのため、私のサンプルでは結果は常に 0 です。
このプラットフォームでは、char は幅 8 ビット、int は 16 ビットです。