Dato questo esempio:Modulo operatore (%) dà risultati divergenti
std::vector<int> numbers = {5,6,7}; //size is 3
int i = -1;
std::cout << i % 3 <<"\n"; // output: -1
std::cout << i % numbers.size() << "\n"; // output: 0
sostanzialmente in entrambe le istruzioni im elaborazione -1% 3, ma le uscite compilatore numeri differenti. Non capisco questo risultato, forse qualcuno può spiegarmelo.
edit: come @ Chris, @ Keith Thompson @AnT suggerito il frammento di
std::cout << std::numeric_limits<std::size_t>::max() % 3 <<"\n"; //output: 0
std::cout << i % numbers.size() << "\n"; // output: 0
stampe i risultati attesi. Grazie per l'utile consiglio a tutti!
Vedere qui: http://stackoverflow.com/questions/7594508/modulo-operator-with-negative-values –
@ RollenD'Souza: Questo è in realtà non correlato. – Deduplicator
Il problema è che "numbers.size()" sembra essere "unsigned int"; e il "-1" viene convertito in "0xffffffff" (o qualunque sia il valore per la tua architettura) dietro la schiena :( – FoggyDay