как конвертировать дробь в двоичную?

<p><code>1/10(decimal) = 0.0001100110011... (binary)</code></p><p>как я могу это сделать? я должен преобразовать в двоичный файл, а затем разделить? может ли кто-нибудь показать мне?</p>

<p>в университете я узнал это так:</p><ol> <li>умножить на два</li> <li>принять десятичную цифру</li> <li>взять дробь в качестве отправной точки для следующего шага</li> <li>повторяйте, пока не достигнете 0 или периодического числа</li> <li>читать число, начинающееся сверху - первый результат - первая цифра после запятой</li> </ol><p>пример:</p><pre><code>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. </code></pre>

<pre> 1 1 - (dec) = ---- (bin) 10 1010 0.000110011 .. . ------------- 1010 | 1.0000000000 1010 ------ 01100 1010 ----- 0010000 1010 ----- 01100 1010 ----- 0010 </pre>

<p>это может несколько запутать, но десятичные позиции в двоичном коде будут представлять собой взаимные значения степеней двух (например, 1/2, 1/4, 1/8, 1/16 для первого, второго, третьего и четвертого десятичного знака, соответственно) так же, как и в десятичном, десятичные разряды представляют собой взаимные значения последовательных степеней десяти.</p><p>чтобы ответить на ваш вопрос, вам необходимо выяснить, какие взаимные степени двух необходимо добавить, чтобы сложить до 1/10. например:</p><p>1/16 + 1/32 = 0,09375, что довольно близко к 1/10. добавление 1/64 ставит нас, как и 1/128. но 1/256 приближает нас еще ближе. так:</p><p>0.00011001 двоичный = 0.09765625 десятичный, что близко к тому, что вы спросили.</p><p>вы можете продолжать добавлять все больше и больше цифр, поэтому ответ будет 0,00011001 ...</p>

<p>вот как думать о методе.</p><p>каждый раз, когда вы умножаете на 2, вы сдвигаете двоичное представление числа на 1 место. вы переместили самую высокую цифру после точки на 1-е место, поэтому снимите эту цифру, и это первая (самая высокая, поэтому самая левая) цифра вашей дроби. сделайте это снова, и у вас будет следующая цифра.</p><p>преобразование базы целого числа путем деления и взятия остатка в качестве следующей цифры сдвигает число вправо. вот почему вы получаете цифры в обратном порядке, сначала младший.</p><p>это, очевидно, обобщает любую базу, а не только 2, как указано <a href="https://stackoverflow.com/users/954414/goofyball">goofyball</a> .</p><p>еще одна вещь для размышления: если вы округляете до n цифр, остановитесь на n + 1 цифрах. если цифра # n + 1 равна единице, вам необходимо округлить ее (поскольку двоичные цифры могут быть только 0 или 1, усечение со следующей цифрой 1 столь же неточно, как и усечение 5 в десятичной дроби).</p>

<p>мне понадобилось время, чтобы понять ответ @femaref (s), поэтому я подумал, что я уточню.</p><p><strong>elboration</strong></p><p>вы хотите преобразовать десятичный <code>1/10</code>, который равен <code>0.1</code>, в двоичный файл. начните с <code>0.1</code> в качестве ввода и выполните следующие действия:</p><ol> <li>умножьте ввод на 2 (мультиколонка)</li> <li>взять десятичную из ответа (столбец ответа) в качестве цифры (двоичный столбец)</li> <li>возьмите дробь (столбец дроби) в качестве ввода для следующего шага</li> <li>повторите шаги 1, 2 и 3, пока не получите 0 или периодическое число. начало периодического числа в этом случае показано в последнем столбце, поэтому мы можем на этом остановиться. но я продолжал показывать повторение для ясности.</li> <li>ответ - числа, взятые из двоичного столбца, начинающегося сверху.</li> </ol><p>в этом случае это:</p><pre><code>0.00011(0011) note: numbers within parenthesis will keep repeating (periodic) </code></pre><hr><pre><code>+-------+-------+--------+---------+----------+--------+----------------------+ | 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 | | +-------+-------+--------+---------+----------+--------+----------------------+ </code></pre>