Aracılığıyla paylaş


C6297

Uyarı C6297: Aritmetik taşma: 32 bitlik değer kaydırılır, ardından 64 bitlik değere çevrilir.Sonuç beklenen bir değer olmayabilir

Bu uyarı parçalı terfi kurallarından olan yanlış davranışları ve bu tipik gerçekleşen aritmetik değerlerden büyük olan türleri gösterir.

Bu durumda, 32-bit bir değer sola kaydırılır ve o kaydırma işleminin sonucunu bir 64-bit değere çevrilir.Bu kaydırma işlemi 32-bit değeri aşıyorsa bitler kaybolur.

Eğer bit kaybetmek istemiyorsanız kaydırma yapılacak değeri kaydırma yapmadan önce 64-bit bir değere çevirin.Eğer bit kaybetmek istiyorsanız işaretsiz uzun ya da kısa bir tipe uygun çevirmeyi gerçekleştirme veya kaydırmanın sonuçunu maskeleme bu uyarıyı ortadan kaldıracaktır ve kodun amacını daha açık hale getirecektir.

Örnek

Aşağıdaki kod bu uyarıyı oluşturur:

void f(int i)
{
  unsigned __int64 x;

  x = i << 34;
  // code 
}

Bu uyarı düzeltmek için aşağıdaki kodu kullanın:

void f(int i)
{
  unsigned __int64 x;
  // code
  x = ((unsigned __int64)i) << 34;
}

Ayrıca bkz.

Başvuru

Derleyici uyarı (düzey 1) C4293