警告 C6297
算術オーバーフローです: 32 ビット値はシフトされ、64 ビット値にキャストします。 結果は予期した値にならないことがあります。
解説
この警告は、整数の上位変換規則と、算術が通常実行される型よりも大きい型の結果として生じる正しくない動作を示しています。
この場合、32 ビット値は左にシフトされ、そのシフトの結果は 64 ビット値にキャストされました。 シフトが 32 ビット値をオーバーフローした場合、ビットが失われます。
ビットが失われないようにするには、値を 64 ビット数にシフトするようにキャストしてから、シフトします。 ビットが失われるようにするには、unsigned long
または short
型への適切なキャストを実行します。 または、シフトの結果をマスクします。 どちらの方法でも、この警告が排除され、コードの意図が明確になります。
コード分析名: RESULTOFSHIFTCASTTOLARGERSIZE
例
この警告が発生するコード例を次に示します。
void f(int i)
{
unsigned __int64 x;
x = i << 34;
// code
}
この警告を解決するには、次のコードを使用します。
void f(int i)
{
unsigned __int64 x;
// code
x = static_cast<unsigned __int64>(i) << 34;
}
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示