Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
| Lady_Arvena |
16.1.2009, 18:12
Сообщение
#1
|
![]() Пользователь Группа: Пользователи Сообщений: 52 Регистрация: 16.1.2009 Пользователь №: 21 326 |
Здравствуйте, помогите пожалуйста, разобраться с задачей. У меня ничего не получается, уже который день, а скоро сдавать...
Надо найти значения выражений: С1 = А+В, С2 = А-В, С3 = В-А, С4 = -А-В, если А = +4556; B: -699; Надо перевести их в двоично-десятичную систему счисления, и сформировать дополнительный код, и его же использовать для вычислений... Перевела: [A]пк = [A]дк = 0. 0100 0101 0101 0110; [B]пк = 1. 0110 1001 1001; [B]дк = 1. 0011 0000 0000. Дальше, подскажите как вычислять эти выражения. Заранее всем спасибо большое! |
| afterstep |
17.1.2009, 13:46
Сообщение
#2
|
|
Пользователь Группа: Активисты Сообщений: 5 336 Регистрация: 14.3.2005 Пользователь №: 2 413 |
1) уравняй длину
2) не совсем понял метод перевода A = 4556 -> 0x11cc -> 0001000111001100 B = 699 -> 0x02bb -> 0000001010111011 - ет без минуса - ет только число перевести логическое отрицание сего + 1 и даст искомое B = -699 -> 0xfd45 -> 1111110101000101 Итого - пример - A+B=0x0f11 -> 0000111100010001 то есть Код 0001000111001100 + 1111110101000101 -------------------------- 1 0000111100010001 и бит переноса (переполнение) - игнорируем то же самое - шестнадцатиричньіе 11cc fd45 ------- 1 0f11[/code] c+5=11; c+4+1=11 d+1+1=f 1+f=11 аналогично - минус, только сразу учитьіваем, что придестя "позаимствовать" A-B=0x1487 -> 0001010010000111 Код 1 0001000111001100 1111110101000101 ------------------------- 0001010010000111 "заимствование" процессор "исполняет" автоматичекски Достаточно считать, что как у хорошего шулера - всегда есть "запасная единичка в наивьісшем разряде" "в рукаве" Сообщение отредактировал afterstep - 17.1.2009, 13:46 |
| PolPoll |
17.1.2009, 15:31
Сообщение
#3
|
![]() :) Группа: Главные администраторы Сообщений: 5 858 Регистрация: 24.11.2005 Из: Москва Пользователь №: 5 327 |
2) не совсем понял метод перевода A = 4556 -> 0x11cc -> 0001000111001100 Здравствуйте, помогите пожалуйста, разобраться с задачей. У меня ничего не получается, уже который день, а скоро сдавать... Надо найти значения выражений: С1 = А+В, С2 = А-В, С3 = В-А, С4 = -А-В, если А = +4556; B: -699; Надо перевести их в двоично-десятичную систему счисления, и сформировать дополнительный код, и его же использовать для вычислений... Дальше, подскажите как вычислять эти выражения. Заранее всем спасибо большое! для -A найди еще дополнительный код С1 = А+В, дк(A) + дк(B ) С2 = А-В = дк(A) + дк(-B ) С3 = В-А, дк(B ) + дк(-A) С4 = -А-В, дк(-A) + дк(-B ) если получится отрицательное число - то нужен обратный перевод в прямой код + знак минус только вот почему у тебя "знак" не часть твоих 16 битов? почему отдельно? или у тебя 32 бита? -------------------- |
| PolPoll |
17.1.2009, 16:10
Сообщение
#4
|
![]() :) Группа: Главные администраторы Сообщений: 5 858 Регистрация: 24.11.2005 Из: Москва Пользователь №: 5 327 |
А кстати... а есть ли дополнительный код в двоично-десятичной системе счисления??
Как вот это (дк) получено? Цитата [B]пк = 1. 0110 1001 1001; [B]дк = 1. 0011 0000 0000. -------------------- |
| Lady_Arvena |
17.1.2009, 17:31
Сообщение
#5
|
![]() Пользователь Группа: Пользователи Сообщений: 52 Регистрация: 16.1.2009 Пользователь №: 21 326 |
Да, я перевожу в двоично-десятичный. То есть по вот этой табличке:
![]() Каждая десятичная цифра заданного числа переводится по табличке в свой двоичный эквивалент. Я перевела, у меня получилось А = +4556 (в 10 СС) = 0100 0101 0101 0110 (в 2-10 СС); Операнд B = -699 (в 10 СС) = - 0110 1001 1001 (в 2-10 СС); Цитата 1) уравняй длину А как уравнять длину? Вот так (когда складываю А и В в доп. коде): 0. 0100 0101 0101 0110 (А (дк)) + 1. 0011 0000 0000 (В (дк)) Там действительно получается, что надо куда-то написать нули. Я пишу вот так: 0. 0100 0101 0101 0110 (А (дк)) + 1. 0000 0011 0000 0000 (В (дк)) (то есть в первую тетраду, а выравниваю по правому краю). Верно ли это? Цитата Так и вычисляй как в десятичной - отдельно каждые 4 цифры, начиная с конца (и складывая по модулю 10, с переносов "излишков" в старший разряд) Спасибо большое, PolPoll, с этим разобралась, у меня тоже получилось, что надо вычислить выражения: С1 = А+В, С2 = А+(-В), С3 = В+(-А), С4 = (-А) +(-В). для -A найди еще дополнительный код С1 = А+В, дк(A) + дк(B ) С2 = А-В = дк(A) + дк(-B ) С3 = В-А, дк(B ) + дк(-A) С4 = -А-В, дк(-A) + дк(-B ) если получится отрицательное число - то нужен обратный перевод в прямой код + знак минус Самое сложное начинается потом: Я пытаюсь вычислить первое выражение и найти С1: 0. 0100 0101 0101 0110 (А (дк)) + 1. 0000 0011 0000 0000 (В (дк)) ______________________ 1. 0100 1000 0101 0110 (это получилось). Посмотрите, пожалуйста, правильно ли у меня это получилось? Цитата А кстати... а есть ли дополнительный код в двоично-десятичной системе счисления?? Как вот это (дк) получено? Да, есть, там надо сначала перевести в двоично-десятичную СС сами числа (которые сначала заданы в десятичной), а потом сформировать для них дополнительный код. [B]пк = 1. 0110 1001 1001; -- это прямой код перевёденного В, он получен так же, только в качестве знакового разряда стоит 1, что показывает, что число отрицательное. То есть, сам модуль числа 0110 1001 1001, и просто к нему прибавила единичку. А это [B]дк = 1. 0011 0000 0000 получено вот так: 1001 1001 1001 - 0110 1001 1001 _____________ 0011 0000 0000. (Мне в инсте подсказали, что надо из 1001 вычитать модуль числа). Но я не уверена насчёт правильности, а как переводить в дополнительный код двоично-десятичные отрицательные числа, у меня нет теории... Помогите пожалуйста это сделать, ибо уже месяц сижу, а всё ничего не выходит. Буду очень благодарна за помощь!!! |
| PolPoll |
18.1.2009, 8:56
Сообщение
#6
|
![]() :) Группа: Главные администраторы Сообщений: 5 858 Регистрация: 24.11.2005 Из: Москва Пользователь №: 5 327 |
Да, есть, там надо сначала перевести в двоично-десятичную СС сами числа (которые сначала заданы в десятичной), а потом сформировать для них дополнительный код. [B]пк = 1. 0110 1001 1001; -- это прямой код перевёденного В, он получен так же, только в качестве знакового разряда стоит 1, что показывает, что число отрицательное. То есть, сам модуль числа 0110 1001 1001, и просто к нему прибавила единичку. А это [B]дк = 1. 0011 0000 0000 получено вот так: 1001 1001 1001 - 0110 1001 1001 _____________ 0011 0000 0000. (Мне в инсте подсказали, что надо из 1001 вычитать модуль числа). Но я не уверена насчёт правильности, а как переводить в дополнительный код двоично-десятичные отрицательные числа, у меня нет теории... 1) СНАЧАЛА надо выровнять, потом отнять, потом еще и плюс 1 получится 1. 1001 0011 0000 0001 Теперь считаем: С1 = А+В 0. 0100 0101 0101 0110 (А (дк)) + 1. 1001 0011 0000 0001 (В (дк)) ______________________ 1. 1101 1000 0101 0111 в первой тетраде число >9! тогда отнимаем от него 10 (=1010) и переносим 1 в старший разряд - получаем знак + (=0) 0. 0011 1000 0101 0111 (С1 (дк)) = пк, тк положительное А = 4556; B = -699; С1=3857 -------------------- |
| PolPoll |
18.1.2009, 9:20
Сообщение
#7
|
![]() :) Группа: Главные администраторы Сообщений: 5 858 Регистрация: 24.11.2005 Из: Москва Пользователь №: 5 327 |
в тетраде число >9! тогда отнимаем от него 10 (=1010) и переносим 1 в старший разряд -------------------- |
| Lady_Arvena |
18.1.2009, 13:25
Сообщение
#8
|
![]() Пользователь Группа: Пользователи Сообщений: 52 Регистрация: 16.1.2009 Пользователь №: 21 326 |
Спасибо большое, PolPoll!!!
Да, теперь, благодаря объяснениям, я уже начинаю разбираться немного... У меня тоже получилось: 1) То есть просто дописываю к - 0110 1001 1001 в первую тетраду нули, и получается: В = - 0699 = - 0000 0110 1001 1001; Потом при переводе в дополнительный код точно так же получилось: 1001 1001 1001 1001 - 0000 0110 1001 1001 ------------------------- 1001 0011 0000 0000, прибавляю единичку: В(дк) = 1. 1001 0011 0000 0001 А вот потом при сложении возникли проблемы... Спасибо, что объяснила, что когда переполнение тетрады (или как это назвать), то есть когда число в тетраде больше 9, то надо так переносить, вот этого я и не знала, поэтому и запуталась... А теперь вот делаю С2 = А + (-В), то есть тут В уже положительное... Дополнительный код числа -В: -В (дк) = 0. 0000 0110 1001 1001; Выполняю сложение: 0. 0100 0101 0101 0110 (А (дк)) + 0. 0000 0110 1001 1001 (-В (дк)) --------------------------------------- 0. 0100 1011 1110 1111 Вот, сразу в последней тетраде вышло такое число, что я вообще никак не могу понять, что за оно, и как его перевести... Может быть, тут тоже требуется какой-то особый перенос? (Или я сосчитала что-то неправильно? Пересчитывала много раз, это же получается). А в третьей тетраде выходит 15, во второй 11, в первой 4... к которой надо будет прибавлять 1, и получится, собственно, требуемое число... (5255...) Только вот как быть в последней тетрадой, я не знаю, подскажи, пожалуйста. |
| PolPoll |
18.1.2009, 14:05
Сообщение
#9
|
![]() :) Группа: Главные администраторы Сообщений: 5 858 Регистрация: 24.11.2005 Из: Москва Пользователь №: 5 327 |
А теперь вот делаю С2 = А + (-В), то есть тут В уже положительное... Дополнительный код числа -В: -В (дк) = 0. 0000 0110 1001 1001; Выполняю сложение: 0. 0100 0101 0101 0110 (А (дк)) + 0. 0000 0110 1001 1001 (-В (дк)) --------------------------------------- 0. 0100 1011 1110 1111 Вот, сразу в последней тетраде вышло такое число, что я вообще никак не могу понять, что за оно, и как его перевести... Может быть, тут тоже требуется какой-то особый перенос? (Или я сосчитала что-то неправильно? Пересчитывала много раз, это же получается). А в третьей тетраде выходит 15, во второй 11, в первой 4... к которой надо будет прибавлять 1, и получится, собственно, требуемое число... (5255...) Только вот как быть в последней тетрадой, я не знаю, подскажи, пожалуйста. поскольку больше 9, отнимай 10, а к предыдущей тетраде прибавляй 1 там тоже станет 1111. опять отнимай - прибавляй... и т.д. -------------------- |
| Lady_Arvena |
18.1.2009, 16:27
Сообщение
#10
|
![]() Пользователь Группа: Пользователи Сообщений: 52 Регистрация: 16.1.2009 Пользователь №: 21 326 |
Спасибо, там теперь получилось!
0. 0100 0101 0101 0110 + 0. 0000 0110 1001 1001 ---------------------------- 0. 0100 1011 1110 1111 , и получилоь в итоге значение: 0. 0101 1100 0101 0101, что в переводе на десятичную систему счисления получается 5255... PolPoll, там какая-то странная вещь выходит с третьим примером... Получается вообще что-то не то. Вот как я считала: Дополнительный код -А = 1. 0101 0100 0100 0100; (Дополнительный код я находила следующим образом: 1001 1001 1001 1001 - 0100 0101 0101 0110 ------------------------- 0101 0100 0100 0011 + 1 в конце: ------------------------- 0101 0100 0100 0100) Дальше считаю С3: 1. 1001 0011 0000 0001 + 1. 0101 0100 0100 0100 ---------------------------- 10. 1110 0111 0100 0101, что в переводе означает: 10. _14_745... Первую тетраду перевожу, как ты и объясняла: 11. 4745. Не подскажешь, как тут можно с этим разобраться? Потому что там, по подсчётам, тоже должно было выйти: -0699 + -4556 ------- -5255... Сообщение отредактировал Lady_Arvena - 18.1.2009, 16:28 |
| PolPoll |
18.1.2009, 18:19
Сообщение
#11
|
![]() :) Группа: Главные администраторы Сообщений: 5 858 Регистрация: 24.11.2005 Из: Москва Пользователь №: 5 327 |
в третьем должно получится число -5255 в дополнительном коде
и надо будет сделать обратное преобразование в прямой код, чтоб это число "увидеть" то есть сначала отнять 1, потом само число отнять от 1001 ... -------------------- |
| PolPoll |
18.1.2009, 18:27
Сообщение
#12
|
![]() :) Группа: Главные администраторы Сообщений: 5 858 Регистрация: 24.11.2005 Из: Москва Пользователь №: 5 327 |
Дальше считаю С3:
1. 1001 0011 0000 0001 + 1. 0101 0100 0100 0100 ---------------------------- 10. 1110 0111 0100 0101 в первой больше 9! и для знака одного разряда хватит 1. 0100 0111 0100 0101 (знак "-" в результате переноса из старшей тетрады появится) ------------------ теперь переводим в прямой код, тк отрицательное и не совпадает дк с пк --------------- -1 0100 0111 0100 0100 --------------- 1001 1001 1001 1001 - 0100 0111 0100 0100 ============== 0101 0010 0101 0101 = 5255 и отрицательное оно -------------------- |
| PolPoll |
9.2.2009, 20:15
Сообщение
#13
|
![]() :) Группа: Главные администраторы Сообщений: 5 858 Регистрация: 24.11.2005 Из: Москва Пользователь №: 5 327 |
-------------------- |
| Lady_Arvena |
21.2.2009, 21:06
Сообщение
#14
|
![]() Пользователь Группа: Пользователи Сообщений: 52 Регистрация: 16.1.2009 Пользователь №: 21 326 |
Вопрос вот такой:
Преподаватель (не знаю, что его не устраивает... Надо использовать инверсный + 1 = для дополнительного. То есть просто инвертировать модуль прямого кода В и прибявлять к нему 1 = там будет лишняя шесть. А потом при коррекции учитывать эту шесть и прибавлять 0110 во всех тетрадах, где был перенос в старший разряд. То есть я делаю: Двоично-десятичный код заданных чисел будет: A2-10 = 0100 0101 0101 0110 B2-10 = - 0000 0110 1001 1001 Прямой двоично-десятичный код этих чисел будет: [A]пк = 0. 0100 0101 0101 0110; [B]пк = 1. 0000 0110 1001 1001. Инверсный код В+1: 1.1111 1001 0110 0111 Расчёт выражения: [С1]пк: 0.0100 0101 0101 0110 (А дк) + 1.1111 1001 0110 0111 (В ик+6 и +1) ================= 0.0011 1110 1011 1101 + 0110 (коррекцию выполняю в первой тетраде, т.к. в ней был перенос) ================= 0.1001 1110 1011 1110 (т.к. +1) Инвертирую: 0.0110 0001 0100 0001 Таким образом, получается 6141, но должно получиться: 4556 + (-699) = 3857. Как тут надо делать правильно. чтобы получилось требуемое число? |
| Lady_Arvena |
22.2.2009, 6:11
Сообщение
#15
|
![]() Пользователь Группа: Пользователи Сообщений: 52 Регистрация: 16.1.2009 Пользователь №: 21 326 |
Чтобы понятней было, что я имею в виду, вот пример из моего учебника, с которым я делаю всё в точности так, как написано:
Найти двоично-десятичные значения C1, C2, C3, C4, определяемых соответственно выражениями: С1= А+В, С2=А-В, С3= В-А, С4=-А-В, используя модифицированный обратный код, если: А = 3783 и B = -5492. Результат представить в прямом коде. При реализации операции сложения использовать обратный код. Решение Прямой двоично-десятичный код заданных чисел имеет вид [А]пк = 0. 0011 0111 1000 0011, [b ] пк = 1. 0101 0100 1001 0010. Расчет выражений для C1, C2, C3, C4 осуществляется следующим образом. [С1] пк : 0. 0011 0111 1000 0011 [А]ок + 1. 1010 1011 0110 1101 [B ] ик = [B ]ок+6 ================== 1. 1110 0010 1111 0000 - сумма ([А]ок и B ]ик0) + 0110 0110 - коррекция в тедрадах, где был перенос . (эта шестёрка прибавляется к выделенным жирным тетрадам) ========================= 1. 1110 1000 1111 0110 1. 0001 0111 0000 1001 - [С1]пк ========================= - 1 7 0 9 - С(10) = это что получили в итоге; Вот у меня всё делается абсолютно аналогично (только учитываю, что код дополнительный а не обратный, и делаю +1). Но у меня вообще н еполучается правильный ответ, если так (через инверсный код) делать. Что я делаю неправильно?, подскажите, пожалуйста. Сообщение отредактировал Lady_Arvena - 22.2.2009, 6:18 |
| PolPoll |
22.2.2009, 18:18
Сообщение
#16
|
![]() :) Группа: Главные администраторы Сообщений: 5 858 Регистрация: 24.11.2005 Из: Москва Пользователь №: 5 327 |
Чтобы понятней было, что я имею в виду, вот пример из моего учебника, с которым я делаю всё в точности так, как написано: Найти двоично-десятичные значения C1, C2, C3, C4, определяемых соответственно выражениями: С1= А+В, С2=А-В, С3= В-А, С4=-А-В, используя модифицированный обратный код, если: А = 3783 и B = -5492. Результат представить в прямом коде. нужен пример C2 допустим... или С4 -------------------- |
| Lady_Arvena |
24.2.2009, 10:52
Сообщение
#17
|
![]() Пользователь Группа: Пользователи Сообщений: 52 Регистрация: 16.1.2009 Пользователь №: 21 326 |
Цитата то есть сразу в прямом коде, а ты его пытаешься из обратного в прямой перевести Вот примеры для С4, С3, С2 и С1, это тот же пример (там просто используется модифицированный обратный код, но отличие модифицированного кода от простого обратного -- только в том, что в обратном поле знака содержит 1 цифру (0.), а в модифицированном 2 цифры (00.), то есть на то, что он модифицированный, мождно просто не обращать внимания, и один ноль/одну единицу из знакового разряда просто убрать). ![]() ![]() ![]() |
| PolPoll |
24.2.2009, 13:56
Сообщение
#18
|
![]() :) Группа: Главные администраторы Сообщений: 5 858 Регистрация: 24.11.2005 Из: Москва Пользователь №: 5 327 |
Вот по 4 способу и делай.
+1 ты уже заранее сделала, далее всем, что без переноса +1010 (без переносов в другие тетрады) -------------------- |
| Lady_Arvena |
26.2.2009, 19:12
Сообщение
#19
|
![]() Пользователь Группа: Пользователи Сообщений: 52 Регистрация: 16.1.2009 Пользователь №: 21 326 |
Спасибо большое, PolPoll (дошло, как делать надо
|
| Andrei Kanapliou |
22.3.2009, 0:07
Сообщение
#20
|
|
Пользователь Группа: Пользователи Сообщений: 2 Регистрация: 21.3.2009 Пользователь №: 21 590 |
PolPoll или Lady Arvena,
подскажите, пожалуйста, как сложить в обратном двоично-десятичном коде: А + В [А]пк = +1518 (10) = 00. 0001 0101 0001 1000 [B]пк = -3628 (10) = 11. 0011 0110 0010 1000 следовательно [B]ик = 11. 1100 1001 1101 0111 По идее должно получиться -2110 (10) 00. 0001 0101 0001 1000 [A]ок + 11. 1100 1001 1101 0111 [B]ик ----------------------------- 11. 1101 1110 1110 1111 если подгонять под заранее расчитанный результат, то на этом шаге надо и остановиться, а потом просто сделать инверсию: 11. 0010 0001 0001 0000 = -2110 (10) но по правилам надо делать коррекцию +1010 в тетрадах, где не было переноса, т.е. во всех тетрадах здесь: 11. 1101 1110 1110 1111 + 1010 1010 1010 1010 ----------------------- 11. 0111 1000 1000 1001 = -7889 если отнимать от каждой тетрады 0110, то получается тоже -7889, если отнимать 1010 или прибавлять 0110, то получается -3445. Подскажите, пожалуйста, в чём моя ошибка, и как добиться нормального результата. Заранее спасибо P.S. А то я уже 2 раза отсылал эту контрольную, 2 недели разбираюсь с арифметикой и исчерпал все известные мне варианты |
![]() ![]() |
|
Текстовая версия | Сейчас: 23.5.2012, 3:53 |