Я сейчас читаю книгу о программировании на C#, и у нее есть краткое введение в Overflow и Underflow, и автор дает общее представление о том, что происходит, когда вы переходите через допустимый диапазон определенного типа.Может кто-нибудь объяснить переполнение в C# с помощью двоичного?
Пример
short a = 30000;
short b = 30000;
short sum = (short)(a + b); // Explicitly cast back into short
Console.WriteLine(sum); // This would output the value -5536
Поэтому короткий тип только имеет диапазон от -32768 до 32767, и в книге объяснение, данное автором является «для целочисленных типов (байт, короткие, Int, и длинный), наиболее значимые биты (которые переполняются) отбрасываются. Это особенно странно, поскольку компьютер затем интерпретирует его как обертывание. Вот почему в нашем примере мы получаем отрицательное значение. Вы можете легко это увидеть, если вы начинаете с максимального значения для определенного типа (например, short.MaxValue
) и добавляете его к нему ». В # Игроки C Руководство Второе издание, глава 9, стр 58
Вы бы в конечном итоге на минимуме (-32768).
У меня проблема с пониманием этого я запутаться, когда писатель говорит о «компьютер интерпретирует его как обтекание»
так, как я пытался это понять, что короткий тип использует 2 байта (16 бит)
таким образом, число 32767 = 0111111111111111 , если я был +1 к двоичной строке я бы в конечном итоге с 32768 = 1000000000000000 (которые не могут быть представлены с коротким типом, как максимальное значение равно 32767), так что компилятор дает -32768. Почему это отрицательно?
Я понимаю концепцию использования дополнения twos для представления отрицательных чисел, и кто-то может исправить мое мышление здесь или разработать, потому что я не совсем понимаю, почему мы используем только 15 бит из 16 бит для представления положительного диапазона и наиболее Значительный бит для отрицательного диапазона
Вы забываете учитывать бит знака. –
Я не понимаю :(, не могли бы вы объяснить, пожалуйста? – Shabubble
При знаках со знаком один бит (MSB) зарезервирован в качестве знакового бита, чтобы указать, является ли число положительным или отрицательным. Как еще вы могли бы узнать, был отрицательным или нет? Вы не считаете, что этот бит должен присутствовать. –