Как преобразовать дробь в двоичный код?



1/10(decimal) = 0.0001100110011... (binary)



Как мне это сделать? Я должен преобразовать в двоичный код, а затем разделить? Может кто-нибудь показать мне?

467   5  

5 ответов:

в университете я узнал это так:

  1. умножить на два
  2. принять десятичное число в качестве цифры
  3. принимать фракцию в качестве отправной точки для следующего шага
  4. повторяйте, пока вы не дойдете до 0 или периодического числа
  5. читать число, начиная с верхней-первый результат является первой цифрой после запятой

пример:

0.1 * 2 = 0.2 -> 0
0.2 * 2 = 0.4 -> 0
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
0.2 * 2 = 0.4 -> 0
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
Result: 0.00011(0011) periodic.
 1              1
-- (dec)  =   ---- (bin)
10            1010


       0.000110011...
      -------------
1010 | 1.0000000000
         1010
       ------
         01100
          1010
         -----
          0010000
             1010
            -----
             01100
              1010
             -----
              0010

чтобы ответить на ваш вопрос, вам нужно будет выяснить, какие взаимные степени двух нужно будет добавить, чтобы добавить до 1/10. Например:

1/16 + 1/32 = 0.09375, что довольно близко к 1/10. Добавление 1/64 ставит нас выше, как и 1/128. Но, 1/256 делает нас еще ближе. Итак:

0.00011001 binary = 0.09765625 decimal, что близко к тому, что вы спросили.

вы можете продолжать добавлять все больше и больше цифр, так что ответ будет 0.00011001...

вот как думать о методе.

каждый раз, когда вы умножаете на 2, вы сдвигаете двоичное представление числа слева на 1 место. Вы переместили самую высокую цифру после точки На 1-е место, поэтому снимите эту цифру, и это первая (самая высокая, поэтому самая левая) цифра вашей фракции. Сделайте это снова, и у вас есть следующая цифра.

преобразование базы целого числа путем деления и взятия остатка в качестве следующей цифры сдвигает номер справа. Вот почему вы получаете цифры в обратном порядке, сначала самые низкие.

Это, очевидно, обобщается на любую базу, а не только на 2, как указано GoofyBall.

еще одна вещь, о которой нужно подумать: если вы округляете до N цифр, остановитесь на N+1 цифрах. Если цифра # N+1 является единицей, вам нужно округлить (поскольку цифры в двоичном формате могут быть только 0 или 1, усечение со следующей цифрой a 1 так же неточно, как усечение 5 в десятичном формате).

мне потребовалось некоторое время, чтобы понять ответ @Femaref ('s), поэтому я подумал, что буду уточнять.

Elboration

вы хотите, чтобы преобразовать десятичное число 1/10 что равно 0.1 в двоичном формате. Начинаются с 0.1 в качестве входных данных и выполните следующие действия:

  1. умножьте входной сигнал на 2 (столбец mult)
  2. возьмите десятичное число из ответа (столбец ответа) в качестве цифры (двоичный столбец)
  3. примите фракцию (столбец фракции) как входной сигнал для следующего шага
  4. повторяйте шаги 1, 2 и 3, пока не получите 0 или периодическое число. Начало периодического числа в этом случае показано в последнем столбце, поэтому мы можем остановиться на этом. Но я продолжал показывать повторение для ясности.
  5. ответ-Это числа, взятые из двоичного столбца, начинающегося сверху.

в данном случае это:

0.00011(0011) Note: numbers within parenthesis will keep repeating (periodic)

+-------+-------+--------+---------+----------+--------+----------------------+
| input | mult  | answer | decimal | fraction | binary |                      |
+-------+-------+--------+---------+----------+--------+----------------------+
|   0.1 |  2    |    0.2 |    0    |     .2   |      0 |                      |
|   0.2 |  2    |    0.4 |    0    |     .4   |      0 |                      |
|   0.4 |  2    |    0.8 |    0    |     .8   |      0 |                      |
|   0.8 |  2    |    1.6 |    1    |     .6   |      1 |                      |
|   0.6 |  2    |    1.2 |    1    |     .2   |      1 |                      |
|   0.2 |  2    |    0.4 |    0    |     .4   |      0 |                      |
|   0.4 |  2    |    0.8 |    0    |     .8   |      0 |                      |
|   0.8 |  2    |    1.6 |    1    |     .6   |      1 |                      |
|   0.6 |  2    |    1.2 |    1    |     .2   |      1 | < Repeats after this |
|   0.2 |  2    |    0.4 |    0    |     .4   |      0 |                      |
|   0.4 |  2    |    0.8 |    0    |     .8   |      0 |                      |
|   0.8 |  2    |    1.6 |    1    |     .6   |      1 |                      |
|   0.6 |  2    |    1.2 |    1    |     .2   |      1 |                      |
+-------+-------+--------+---------+----------+--------+----------------------+

Comments

    Ничего не найдено.