В C и C++ поведение знакового целочисленного переполнения или нижнего потока не определено.Содержит ли спецификации C# и Java одно и то же поведение при переполнении целых чисел?
В Java и C# (неконтролируемые контексты) поведение, по-видимому, определяется в определенной степени.
Из спецификации Java, мы имеем:
Целые операторы не указывают на переполнение или опустошение в любом случае.
И:
Язык программирования Java использует представление дополнительного кода комплемента для целых чисел [...]
От C# спецификации, мы имеем:
[...] В неконтролируемом контексте переполнение игнорируется и y старших битов, которые не соответствуют типу назначения, отбрасываются.
Проверяя оба, я получил ожидаемый наматывается вокруг результата. Судя по формулировке спецификаций, у меня возникает ощущение, что в Java результат переносимый (потому что язык требует представления представления 2), в то время как C# может иметь или не иметь такой результат (поскольку он не указывает на представление - только то, что биты более высокого порядка отбрасываются).
Таким образом, оба языка гарантируют одинаковое поведение на всех платформах (только с разной формулировкой)? Или они просто оказываются одинаковыми друг с другом в моем тестовом случае (на x86 и под JRE от Sun и Microsoft .NET), но теоретически могут отличаться в других архитектурах или реализациях?
Если поведение хорошо определено для языка, почему он должен отличаться между платформами ?! – JimmyB
@HannoBinder Когда я использую термин * четко определенный *, я имею в виду его в отличие от * undefined * - ни на Java, ни на C# он не определен.Но я до сих пор не понимаю, специфицирует ли спецификация портативных результатов или просто оставляет поведение как * определяемое реализацией *. –
Если вы посмотрите на * Работа с 32-разрядными Целочисленными значениями без десятичного разряда * в документации [System.Int32] (https://msdn.microsoft.com/en-us/library/system.int32.aspx), вы можете см., что, по крайней мере, для ints, представление одинаково для всех платформ. Я подозреваю, что это то же самое для других типов. –