Сб. Апр 6th, 2024

Как было показано, целочисленная арифметика в ограниченном числе разрядов несколько отличается от обычной. При выполнении арифметических действий в целочисленной k-разрядной арифметике возможно возникновение следующих ошибок:

  • левые цифры результата, выходящие за отведенное количество разрядов, оказываются утерянными;
  • при сложении двух положительных чисел, представленных в знаковом типе данных, мы можем получить отрицательное число, если в результате сложения в левом знаковом разряде окажется единица.

Выполним сложение 100 и 51 в 8-разрядном знаковом типе. В 8-разрядном компьютерном представлении эти числа имеют следующий вид:

100 = 011001002 и 51 = 001100112.

При сложении этих чисел получим 100101112. Первая единица (знаковый разряд) указывает на то, что в остальных разрядах получено отрицательное число. Получим теперь значение данного отрицательного числа по его дополнительному коду. Оно в итоге равно -105.

Таким образом, 100 + 51 = -105 в 8-разрядной знаковой арифметике.

Вычислим значения факториала в широко распространенном знаковом 16-разрядном типе (int Turbo-Pascal). Значение:

7! = 1·2·3·4·5·6·7 = 5250 = 1010010000010210002

уместится в 16-ти разрядах, а значение:

8! = 7!·8 = 10100100000102·10002 = 10100100000100002

в 16-ти разрядах уже не уместится. Для записи этого числа требуется как минимум 17 разрядов в знаковом типе. При записи значения 8! в 16 разрядов самая старшая (значащая) единица попадает в знаковый разряд и трактуется как знак отрицательного числа. Таким образом, получившееся значение соответствует отрицательному числу -25216.

Следует заметить, что и в 32-разрядном целом типе возможно получить только значение 12!, а для 13! результат будет неверным, хотя полученное в 32-разрядной знаковой арифметике число окажется положительным: 1 932 053 504. При умножении 12! на 13 результат содержит 33 значащих двоичных цифры, то есть самая левая единица в 32-разрядной арифметике оказывается утерянной, а вторая слева цифра равна 0, что и определяет положительный знак результата такого умножения в знаковом типе. Полученное положительное значение может ввести в заблуждение: в случае отрицательного результата его ошибочность очевидна, а в данном случае — нет.

От content

Ads Blocker Image Powered by Code Help Pro

Обнаружен блокировщик рекламы! Пожалуйста, обратите внимание на эту информацию.

We\'ve detected that you are using AdBlock or some other adblocking software which is preventing the page from fully loading.

У нас нет баннеров, флэшей, анимации, отвратительных звуков или всплывающих объявлений. Мы не реализовываем эти типы надоедливых объявлений! Нам нужны деньги для обслуживания сайта, и почти все они приходят от нашей интернет-рекламы.

Пожалуйста, добавьте tehnar.info к вашему белому списку блокирования объявлений или отключите программное обеспечение, блокирующее рекламу.

Powered By
100% Free SEO Tools - Tool Kits PRO