![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 17.01.2011
Сообщений: 3
|
![]()
Целочисленный тип integer определяет числа в диапазоне (-32768..32767), которые представляются в формате с фиксированной точкой. В случае присваивания переменной этого типа числа, выход. за пределы максимально\минимально допустимого, паскаль ошибки переполнения разрядной сетки не выдаёт, зато переменная принимает значения, зависимость между которой с правильным результатом я установить не могу.
Вот некоторые примеры: 1)48000(10)=1011 1011 1000 0000(2), Но на мониторе: -17536(10)=-100 0100 1000 0000(2) 2)90000(10)=1 0101 1111 1001 0000(2), а выводит строку: 24464(10), (101 1111 1001 0000 в двоичной) 3)56000(10) =1101 1010 1100 0000, на мониторе: -9536(10) (10 0101 0100 0000 в двоичной с.с.) Объясните ,пожалуйста, каким образом получаются именно такие числа: я не могу есть, я не могу спать ![]() |
![]() |
![]() |
![]() |
#2 | |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]() Цитата:
1 + 1 = 10, правильно? А если у нас всего один бит для памяти, то будет 0. 1111 + 1 = 1 0000, но у нас 4 ячейки, следовательно = 0000 1111 + 10 = 1 0001 = 0001. аналогично с большими цифрами. На интеджере может немного расходиться, поскольку у него первый бит - это знак, а дальше не помню в каком порядке идет (кажись прямой для +, обратный для -). Короче переполнение происходит.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
|
![]() |
![]() |
![]() |
#3 | |
Новичок
Джуниор
Регистрация: 17.01.2011
Сообщений: 3
|
![]() Цитата:
Если возникает переполнение, то "1" идёт в старший разряд- меняется знак на противоположный в не модифицированном коде. А что происходит с числовыми разрядами при смене знака на противоположный? (если только они не хранятся в доп. коде)..? |
|
![]() |
![]() |
![]() |
#4 | |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]() Цитата:
Код:
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
|
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 17.01.2011
Сообщений: 3
|
![]() |
![]() |
![]() |
![]() |
#6 | |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]() Цитата:
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
|
![]() |
![]() |
![]() |
#7 | |||
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
Один и тот же набор бит можно рассматривать по-разному, в зависимости от принятого формата. Для знаковых чисел принято знак хранить в старшем разряде, при этом сами числа хранятся в дополнительном коде.
Так, например, беззнаковое число 65535 ($FFFF) при рассмотрении его как знакового превращается в -1 ($FFFF). Теперь рассмотрим ваши примеры. Цитата:
Цитата:
Цитата:
Возьмите граничные случаи, может так будет проще: $0000 (0) = 0 ($0000) .... $7FFF (32767) = 32767 ($7FFF) $8000 (32768) = -32768 ($8000) ... $FFFF (65535) = -1 ($FFFF)
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
|||
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вычесть из Integer Form2 Integer Form1 | Shouldercannon | Общие вопросы Delphi | 2 | 30.07.2010 17:47 |
Turbo Pascal or Pascal ABC | Ikram | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 27.04.2010 13:44 |
сравнить 2 integer переменные БЕЗ IF или CASE (Pascal) | dyonysos | Помощь студентам | 8 | 02.02.2010 17:51 |
а free pascal не читает задачи которые написаны на turbo pascal? | demonara | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 25.05.2009 16:28 |
integer, for, if в Pascal | boom99 | Помощь студентам | 3 | 12.11.2007 16:25 |