Деление двоичных чисел

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Дикс, 3 Nov 2006.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    не нашел ветки, более подходящей для вопроса.

    Долго ломал голову, но так и не догнал.
    Нужно поделить 11110 на 110

    В мануале такой пример
    [​IMG]

    от 11110 отнимают 110
    и дальше почему-то идёт опять 110 (это же не ответ, 30-6=24)
    затем ноль не пишут (тогда из каких соображений его вообще взяли?)
    и потом опять 110

    вобщем два вопроса: почему в третьей строке вместо ответа стоит 110
    и из каких соображений вообще брали ноль (в числе 101)

    надеюсь кто-нить поможет
     
    1 person likes this.
  2. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,362
    Likes Received:
    1,157
    Reputations:
    430
    Когда-то в своё время экзамен по ассемблеру сдавал(фу бяка какая, фу) пользовался вот этим:
    _http://www.dstu.edu.ru/informatics/mtdss/part1.html
    (ну не совсем этим, но похоже. А вообще лекциями в основном)
    Чё-т похожее...
    _http://forum.ixbt.com/topic.cgi?id=26:35304
     
    #2 Ch3ck, 3 Nov 2006
    Last edited: 3 Nov 2006
    1 person likes this.
  3. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    перевели в десятичную систему, раздели а потом опять в двоичную! всегото...

    а ошибка в том что 11110-110=11000 а не 110! при вычитание выравнивать надо по правому краю!)) в переди можно дописоват скок угодно нулей
    вот:
    11110
    00110
    11000
     
    #3 nc.STRIEM, 3 Nov 2006
    Last edited: 3 Nov 2006
  4. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    аа, они меня пытаются наипать, я и в другом примере подобное замечал, пока сам не решил, не мог понять как у них получилось
    спасиб, попробую

    хотелось бы уточнить потому что в статье не написано прямым текстом:
    1-1 = 0
    1-0 = 1
    0-1 = 0
    0-0 = 1
    правильно?
     
    #4 Дикс, 4 Nov 2006
    Last edited: 4 Nov 2006
  5. Talisman

    Talisman Elder - Старейшина

    Joined:
    22 Apr 2006
    Messages:
    400
    Likes Received:
    151
    Reputations:
    80
    0-0=0 ИМХО
     
  6. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    а, мля
    вот
    1-1 = 0
    1-0 = 1
    0-1 = 1
    0-0 = 0
    самый правильный вариант, пасиба

    2Dr.Check
    пасиб за ссылки
     
  7. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    и когда 0-1 = 1 еще 1 заниаеться у впереди стоящего разряда))
    например:
    100
    010
    010
     
  8. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    1011011101001 / 1110011
    -1110011000000 | 110011
    -----------------------
    1001000101000
    - 1110011000000
    -----------------------
    1110001001
    - 1110011
    -----------------------
    1111010

    вопрос такой: когда я составляю ответ (последняя строчка), надо ли в него вписывать те две единицы, что я выделил жирным?
    и ещё как мне вообще узнать когда в ответ вписывать нули, чтобы сместить число?
    или специально подставляют нужное кол-во нулей, чтобы двигать число вправо и отсекать те цифры, что остаются слева? (выделены жирным)
     
  9. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    Дикс! Чтобы легче было из числа вычитать число, есле в дном числе меньше цифр чем в другом, то добовляй нули впереди! тоесть: есле ты хочеш сделать 1110001001-1110011
    то запиши это как 1110001001-0000111001 далее:
    1110001001
    0000111001
    1101010000
    и все)) когда мы делаем 0-1 то занимаем 1 у впереди стоящаего разряда и ответ будет 1! короче при вычитание (есле делаеться 0-1) можно то число ( в данном случае 1110001001) записать так 1101121001 и потом проводить вычитание!
     
    #9 nc.STRIEM, 5 Nov 2006
    Last edited: 5 Nov 2006
  10. Micr0b

    Micr0b Elder - Старейшина

    Joined:
    14 Jan 2006
    Messages:
    223
    Likes Received:
    168
    Reputations:
    26
    имхо ничего новоги неузнал чесно.. но даже незнаю или бужет полезн ето новичкам.))
    лутше сразу книгу купить и все.))) но всеравно за старания как всегда +
     
  11. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    nc.STRIEM
    ты был неправ по поводу 0-1 = 0
    потому что надо занимать единицу из старшего разряда
    к примеру

    01001-
    00011
    ---------

    1-1=0
    затем занимаем единицу, отмеченную подчёркиванием
    (она становится нулём, а нуль, идущий после неё, напротив - единицей)
    10-1=1
    1-0=1
    0-0=0
    0-0=0

    в связи с этим тоже вопрос:
    а если такая ситуация
    1011-
    1101
    ---------

    1-1=0
    1-0=1
    занимаем подчёркнутую единицу
    10-1=1
    и теперь вот чего получается:
    в первом столбце у нас
    0-1
    а занять уже неоткуда =\

    MS calc выдает
    1111111111111111111111111111111111111111111111111111111111111110 %)))

    в десятичной системе это 11-13
    из этого следует вывод что нельзя получить отрицательное число в двоичной системе :)
     
  12. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    Чет я так и не понял де я был не прав?? В предыдущих постах я все правильно написал! и там написано 0-1=1 и единица занимаеться у впереди стоящего разряда! Вобщето так и есть))
    а в ситуации 1011-1101 тут уже другой алгоритм
    1011 это 11 в десятичной а 1101 это 13! дак вот алгоритм такой мы 11 переводим в отрицательное число, и потом складываем! тоесть -11+13! ток это все в двоичной системе!

    Это и есть правильный ответ! т.к. в отрицательных числах все старшие разряды превращаються в 1
     
    #12 nc.STRIEM, 5 Nov 2006
    Last edited: 12 Nov 2006
  13. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    Точно так же как в 10ой =] Вычти второе из первого и пририсуй знак минус =]
     
  14. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    В компьютере вычитание чисел выполняется сложением в обратных/дополнительных кодах :Р
     
    #14 Zadoxlik, 12 Nov 2006
    Last edited: 12 Nov 2006
  15. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    отжог)))))