Meditando sul Quiz 13 di Adrian

Da qualche tempo sto seguendo - tempo permemettendo - i Quiz di Adrian.

Il Quiz 13 è interessante... a colpo d'occhio la risposta sembra essere "1". Ma testando ci si rende conto che ben due volte "i == -i". Ma quando mi sono chiesto io? Una piccola modifica al codice per far stampare i valori e ci si accorge che "int.MinValue == -1 int.MinValue"! int.MinValue e -1 int.MinValue sono binariamenti uguali, anche se in realtà si tratta di overflow non gestito... se infatti impostiamo tra le opzioni di compilazioni "Check for ArithmeticOverflow/Underflow" vediamo che la cosa non è più fattibile in quanto a runtime ci verrebbe subito notificato un errore :-p

La cosa carina è poi scoprire ragionandoci su che il MinValue è binariamente uguale al MaxValue e che il ciclo for qui sotto da luogo a un loop infinito! :-p

for(int i = int.MinValue; i <= int.MaxValue; i++){
  Console.Write(".");
}

 

«maggio»
domlunmarmergiovensab
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345