Bu siteyi trolle harcadım; Özellikle bu söz konusu: Bunu yaparken Is ((a + (b & 255)) & 255) the same as ((a + b) & 255)?İki imzasız şortun çarpımı gerçekten tanımlanmamış davranışlara yol açabilir mi?
, ben
int main()
{
unsigned short i = std::numeric_limits<unsigned short>::max();
unsigned short j = i;
auto y = i * j;
}
nedeniyle sonradan üzerine taşıyor int
için i
ve j
bir tür tanıtımına istenmeyen davranışlara yol açabilir sonucuna yol açmıştır oldum çarpma! Belki de i
ve j
'un bu kadar büyük olması gerekmez.
Sonucum örneğin unsigned short
16 bit ve int
32 bit olan bir sistemde, davranış tanımlanmamış olabilir, yani.
Burada düzeltildim mi?
no, tanımlanmış davranış (cadı taşma –
@ no no'su dikkate alınmadan '(i * j)% std :: numeric_limits :: max()') ile aynı değere dönüşüyor, bu doğru değil. –
Yakk
Bir yorumda bulunmadığınız için üzücü. –