In C e C++, il comportamento di overflow o underflow con segno intero non è definito.Le specifiche C# e Java spiegano lo stesso comportamento sull'overflow di interi con segno?
In Java e C# (contesti non selezionati), il comportamento sembra essere definito in misura.
Dalla specifica Java, abbiamo:
Gli operatori interi non indicano overflow o underflow in alcun modo.
E:
Il linguaggio di programmazione Java utilizza la rappresentazione in complemento a due per i numeri interi [...]
Dalla specifiche C#, abbiamo:
[...] In un contesto non controllato, gli overflow vengono ignorati e un y i bit di ordine superiore che non rientrano nel tipo di destinazione vengono scartati.
Testando fuori entrambi, ho ottenuto l'atteso avvolgente risultato. A giudicare dalla formulazione delle specifiche, ho la sensazione che in Java il risultato sia portatile (perché la lingua richiede una rappresentazione complemento a 2) mentre C# può o non può avere quel risultato (dato che non sembra specificare una rappresentazione - solo che i bit di ordine superiore vengono scartati).
Quindi, entrambe le specifiche del linguaggio garantiscono lo stesso comportamento su tutte le piattaforme (solo con parole diverse)? Oppure sono semplicemente uguali tra loro nel mio caso di test (su x86 e sotto Sun's JRE e Microsoft's .NET), ma potrebbero teoricamente differire su altre architetture o implementazioni?
Se il comportamento è ben definito per la lingua, perché dovrebbe differire tra le piattaforme ?! – JimmyB
@HannoBinder Quando uso il termine * ben definito *, lo intendo in contrasto con * undefined * - né in Java né in C# è indefinito.Ma non riesco ancora a capire se le specifiche spiegano i risultati portatili o lascia semplicemente il comportamento come * definito dall'implementazione *. –
Se si osserva * Utilizzo di valori interi a 32 bit non decimali * nella [documentazione System.Int32] (https://msdn.microsoft.com/en-us/library/system.int32.aspx) è possibile vedi che, almeno per gli ints, la rappresentazione è la stessa su tutte le piattaforme. Sospetto che sia lo stesso per altri tipi. –