Перевод целых десятичных чисел в двоичные - проще простого (если только уверен, что в твоей цепочке - только символы от '0' до '9'):Sorcerer wrote: Подскажите, пожалуйстаКак мне ввести число, используя консоль?
То есть я в принципе знаю, что нужно ввести строку (или же используя con_getch считывать символы).И даже могу отрубить ненужное - то есть оставить строку, состоящую только из цифр.
Как перевести всё это дело в число?
Интересно и для целых чисел, и особенно для float-point..
Code: Select all
0) обнулить аккумулятор (xor eax,eax)
1) ввести первую (самую старшую) цифру в байтовый регистр (mov bl, byte [string]);
2) вычесть код символа '0' (sub bl, '0') - там останется голая десятичная цифра
3) прибавить эту цифру к аккумулятору;
4) если конец строки - на выход,
5) если нет - умножить аккумулятор на 10
6) ввести в bl след. цифру - и на шаг 2)
Для начала надо таким же манером перевести дробную часть в двоичное число и запомнить сколько всего было разрядов после запятой (включая нули слева и справа). Например, .234 - это 234/1000, а .0234 означает, что число 234 надо делить на 10000. Это вроде бы всем понятно, но многие почему-то до пенсии с этим путаются.
Теперь перейдем к двоичному представлению дробной части. Ее хранят в отдельной структуре фиксированной длины (например, 12 битов), причем старший бит соответствует 1/2, следующий 1/4, ..., самый младший - 1/4096. Короче, .110000000000 = 3/4, а .000000000011 = 3/4096
Осталось только решить пропорцию: Х/(2^b) = D/(10^d),
где Х-наша неизвестная двоичная дробная часть,
b - число бит в двоичной дробной части,
D - известная десятичная дробная часть (уже в двоичной записи!),
d - число цифр в десятичной дробной части
(я специально оставил формулу в виде нерешённой пропорции - её можно использовать и для обратного преобразования двоичных дробей в десятичные)
В FPU вещественные числа представляются в двоичной записи с плавающей точкой. У плавающих чисел целой части вообще нет, есть только дробная часть (мантисса) и показатель - степень двойки, на которую надо умножить мантиссу чтобы получилось данное число. Общий формат числа с плавающей точкой: smmmmmmSppp,
где s - знак мантиссы, S - знак показателя (степень двойки тоже может быть отрицательной!) mmmmm, ppp - биты мантиссы и показателя. Конкретное число бит в этих полях зависит от формата точности (single, float, double, extended) - см доки на FPU.