Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Простенькая задачка... информатика 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:18 Найти цитируемый пост)
1-байтовые, знаковые.




Автор: 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, 20:02 Найти цитируемый пост)

общепринятым стандартом записи

Покажите мне его...

Автор: 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
А чтобы было понятно - вот твой пример, и посмотри его в отладчике ;)

Код

{
    char x,x1,x2,x3;
    x1=0xCE;
    x2=0xD0;
    x3=0xE9;
    x=(x1-x2)*x3;

}

Добавлено @ 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
Цитата(En_t_end @ 12.2.2006, 14:14 Найти цитируемый пост)
Как не переводя в двоичный код, узнать каков знак числа?

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:29 Найти цитируемый пост)
Я имею ввиду в устном счете.

Ну не знаю, обычные люди в устном счете используют десятичные числа, а не однобайтовые знаковые переменные в двоичном коде ;)

Автор: 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 - положительное ;)
Никаких алгоритмов тут больше и не придумать smile

Автор: Dreamer_0x01 12.2.2006, 19:14
Вообще, если у тебя возникла проблема вподобной теме (или ты закосил какую-то важную лекцию smile ), предлагаю почитать что-нибудь самостоятельно про представление чисел.

Например, по Яндексу я нашел следующие ссылки:

http://emc.km.ru/theory/info/b14_2.html

http://www.rbtl.ru/wsap/posobie/chapter1/2.htm

Вполне доступно, особенно в первой мне понравились иллюстрации с окружностями - в общем-то, то самое, что я так долго пытался до тебя довести smile

После прочтения этих недлинных страничек ты перестанешь путаться в представлениях чисел.



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)