| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > Простенькая задачка... информатика 1-байтовые пер. |
| Автор: En_t_end 12.2.2006, 15:18 |
| Переменные X,X1,X2,X3 - 1-байтовые, знаковые. X1 = CE(16), X2 = D0(16), X3 = E9(16) Нужно вычислить X = (X1-X2)*X3 в десятичной системе счисления. Если изначально считать всё в десятичной, то получиться следующее: 206-208 = -2; -2*233 = -466. Но тут как говориться "ой", ведь переменные - однобайтовые, получается переполнение. Что делать ? В каком виде ответ записывать, если он вообще существует. |
| Автор: Dreamer_0x01 12.2.2006, 15:56 |
| А откуда ты взял 206 и 208? |
| Автор: En_t_end 12.2.2006, 15:58 |
| 206(10) = CE(16) 208(10) = D0(16) |
| Автор: cardinal 12.2.2006, 15:58 |
| Если переменные знаковые, то тогда (-50-(-48))*(-23) = 46. Пока не понял в чем проблема... |
| Автор: En_t_end 12.2.2006, 16:00 |
| Dreamer_0x01 Я имею ввиду переменные типа char. Кстати возможно я не прав, но по-моему 1-байтовые переменные, это переменные принимающие максимальное значение 11111111(2) |
| Автор: Dreamer_0x01 12.2.2006, 16:02 |
| Получается, если пользоваться общепринятым стандартом записи отрицательных чисел: (-50-(-48))*(-23)=0x2E (46 в десятичной) |
| Автор: En_t_end 12.2.2006, 16:03 |
| Dreamer_0x01, cardinal, Покажите мне его... |
| Автор: Dreamer_0x01 12.2.2006, 16:08 |
| в любой знаковой переменной старшая единица - это знаковый разряд. Соответственно, диапазон таких чисел будет от -128 до127. Стандарт сейчас попробуем найти. Для начала копнем в понятие прямых, обратных, дополнительных кодов, а также работы процессора ;) |
| Автор: En_t_end 12.2.2006, 16:14 |
| Dreamer_0x01 То есть максимальное значение - (знак 1 или 0) 1111111(2) = 127 или -127. Как не переводя в двоичный код, узнать каков знак числа? |
| Автор: Dreamer_0x01 12.2.2006, 16:15 | ||
А чтобы было понятно - вот твой пример, и посмотри его в отладчике ;)
Добавлено @ 16:20 Нет, немножко не так. Знак числа: старшая единица. То есть если это "1" - то число отрицательное. (разумеется, если у тебя тип знаковый) Далее. Число 0x80, это "10000000b" соответствует -128. Число 0x81, это "10000001b" соответствует -127. Число 0x82, это "10000010b" соответствует -126. .......................... Число 0xFF, это "11111111b" соответствует -1. Ну а числа в диапазоне от 0x00 до 0x7F привычным тебе образом преобразовываются в числа от 0 до 127. |
| Автор: En_t_end 12.2.2006, 16:26 |
| Dreamer_0x01 То есть значимость младших разрядов в отрицательных числах обратна значимости их в аналогично неотрицательных, что в принципе понятно. |
| Автор: cardinal 12.2.2006, 16:26 |
| if (a & 0x80) то а число отрицательное... |
| Автор: En_t_end 12.2.2006, 16:29 |
| cardinal Я имею ввиду в устном счете. |
| Автор: Dreamer_0x01 12.2.2006, 16:41 |
| Если рисовать множество чисел на бумажке, то сначала идет оложительный диапазон, а потом к положительному как бы "приклеивается" справа отрицательный диапазон. То есть числа все время возрастают, но в такой последовательности: 0,1,2,...126,127,-128,-127,...,-2,-1. Всего 256 таких чисел для однобайтовой знаковой переменной. Для двухбайтовой механизм будет таким же. Добавлено @ 16:46 Ну не знаю, обычные люди в устном счете используют десятичные числа, а не однобайтовые знаковые переменные в двоичном коде ;) |
| Автор: En_t_end 12.2.2006, 16:47 |
| Dreamer_0x01 Если не трудно напиши твой алгоритм действий, если ты видишь число 0xCE сказанно n-байтовое, знаковое. Мне нужно знать на каком именно этапе нужно определять знак. Добавлено @ 16:52 Dreamer_0x01 ААААА... я понял, всё огромное спасибо....!!!! То есть "01111111b" = 127, дальше до "11111111b" < 0. |
| Автор: Dreamer_0x01 12.2.2006, 18:58 |
| еще раз повторяю: Видишь единицу в самом старшемразряде числа (то бишь "показывая пальцем" - крайнем левом, то есть число вида 1ХХХХХХХb), то это число отрицательное. Видишь там нолик, "то есть число вида 0ххххххх, то это число положительное. В шестнадцатеричном виде, соответственно, если число начинается с восьмерки или буквы, то число отрицательное, если с цыфры от 0 до 7 - положительное ;) Никаких алгоритмов тут больше и не придумать |
| Автор: Dreamer_0x01 12.2.2006, 19:14 |
| Вообще, если у тебя возникла проблема вподобной теме (или ты закосил какую-то важную лекцию Например, по Яндексу я нашел следующие ссылки: http://emc.km.ru/theory/info/b14_2.html http://www.rbtl.ru/wsap/posobie/chapter1/2.htm Вполне доступно, особенно в первой мне понравились иллюстрации с окружностями - в общем-то, то самое, что я так долго пытался до тебя довести После прочтения этих недлинных страничек ты перестанешь путаться в представлениях чисел. |