Страницы: 1
RSS
Перевод числа из 10 в 2 систему исчисления
 
Перевод числа из 10 в 2 систему исчисления    
 
дано вещественное, десятичное число, организовать в Excel  перевод данного числа в 2-ую систему исчисления
 
Это формула считает только целые числа. А мне надо чтоб еще и десятичные число..  
Например: 0,125  перевести в двоичную
 
=ДЕС.В.ДВ(A1*32)/100000  
Степень двойки равна степени десятки, выбирайте степень в зависимости от диапазона чисел, которые надо перевести.
 
Первый раз в жизни слышу про дробные двоичные числа...  
Это как: уже не 1, но ещё не 0 что ли :)  
В цифровой схемотехнике это называлось "серый уровень"
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Евгений_67}{date=18.05.2011 09:27}{thema=}{post}Это формула считает только целые числа. А мне надо чтоб еще и десятичные число..  
Например: 0,125  перевести в двоичную{/post}{/quote}  
Например, четыре разряда:  
Ноль - 0000  
Единица – 0001  
Как Вы себе представляете 0,125? Покажите без формулы.
 
емнип, дробная часть в десятичной дроби - это степени 10-ки:  
0,125 = 1/10 + 2/100 + 5/1000  
 
соответственно, в двоичной системе = 0/2 + 0/4 + 1/8  
т.е. = 0,001
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
И как это записать?
 
UDF, только для чисел меньше 1 - для примера, никаких проверок  
Function fr10to2(x10 As Double) As String  
   s = "b0,": i = 1  
 Do While x10 > 0  
   i = i * 2  
   If x10 >= 1 / i Then  
     s = s + "1": x10 = x10 - 1 / i  
   Else  
     s = s + "0"  
   End If  
 Loop  
 fr10to2 = s  
End Function
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
впрочем, лучше условие записать так:  
If x10 * i >= 1 Then  
 
хотя всё одно - баловство :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
В двоичной системе шаг равен единице. И число представляется набором нулей и единиц. В цифровой технике, например, оперируют только  двумя состояниями - 0 и 1. Есть ещё третье состояние - высокоимпедансное, когда выход элемента вообще отключен, но в данном случае мы его не рассматриваем. Резюме: между 0000 и 0001 нет промежуточных значений :-)
 
{quote}{login=Юрий М}{date=18.05.2011 11:12}{thema=}{post}В двоичной системе шаг равен единице. И число представляется набором нулей и единиц. В цифровой технике, например, оперируют только  двумя состояниями - 0 и 1. Есть ещё третье состояние - высокоимпедансное, когда выход элемента вообще отключен, но в данном случае мы его не рассматриваем. Резюме: между 0000 и 0001 нет промежуточных значений :-){/post}{/quote}  
 
Вы, наверное, путаете применение двоичной системы счисления в цифровой технике и саму систему счисления как таковую :)  
 
запись любого число в любой системе счисления основана на сумме чисел, каждое из которых представляет собой целую, но не обязательно положительную степень основания этой системы счисления.  
 
например, 12,5 в десятичной = 1*10^1 + 2*10^0 +5*10^(-1) => 12,5  
то же число в двоичной = 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 + 1*2^(-1) => 1100,1
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
оказывается, всё это давно и красиво описано :)))  
 
http://ru.wikipedia.org/wiki/Двоичная_система_счисления
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
А разве в цифровой технике используется не двоичная система?
 
{quote}{login=Юрий М}{date=18.05.2011 11:25}{thema=}{post}А разве в цифровой технике используется не двоичная система?{/post}{/quote}  
а разве я это говорил?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Статью прочитал. Но не могу понять, как двоичному счётчику задать значение между 0 и 1 :-)
 
Юрий,  
а как десятичный счетчик показывает дробное значение? Например, цифровой частотомер? Очень просто - запятая находится не после правого разряда, а между разрядами. Влево от запятой цена разряда 1, 10, 100 и т.д., вправо от запятой цена разряда 1/10, 1/100, 1/1000 и т.д.  
То же самое с двоичным счетчиком: влево от запятой цена разряда 1, 2, 4 и т.д., вправо от запятой 1/2, 1/4, 1/8. От этом ikki уже писал.
 
Про частотомер мне понятно :-) Там мы просто визуально переставляем запятую в нужное нам место, в зависимости от диапазона. Подчеркну - при неизменной частоте. Но шаг последнего разряда в любом случае ведь будет равен единице. Вот я о чём.
 
только стоимость единицы в одном и том же разряде в разных системах счисления - разная. :)  
единица в третьем разряде до запятой в десятичной системе - это 100 рублей, во втором разряде после запятой - 1 копейка.  
в двоичной - 4 рубля и 25 копеек соответственно.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Минутку: 100 рублей - величина неизменная, а отображать её мы можем  
100,0  
100,00  
100,000    
вот это и есть точность.  
А теперь вот что:  
При двух разрядах мы можем отобразить числа от 0 до 3.  
0 – 00  
1 – 01  
2 – 10  
3 – 11  
Покажите мне при двух разрядах запись десятичного числа 0,125? Оно ведь между 0 и 1 «располагается». Наверное, нам нужно определиться с терминами :-)
 
5,125 - в десятичной  
101,001 - в двоичной  
 
в чем принципиальная разница?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
а есть единая формула...перевода десетичное дробное число в двоичное в Excel.  
 
кроме как =ДЕС.В.ДВ(А1) ГДЕ А1 это целое),  
 
есть что с дробными типо...0.125  это  =ДЕС.В.ДВ(А1*32)/100000  
 
нужна единая формула....а то когда тысяча дробей в excel. и все разного диапазона,  
0.125 0.1084 0.8901 и таких 1000 штук....замучаешься считать  
 
Помоггите _) очень надо!)
 
Доделал динамический выбор диапазона:
 
мож кому будет полезной (UDF)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
\Ув. Казанский, желтым отметил сомнительный перевод
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
забыл еще отметить желтым число 100000 (десятичное)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Саша,  
я в курсе :)  
Функция ДЕС.В.ДВ выдает только 9 двоичных разрядов плюс знак, отсюда эта погрешность и необходимость нормировки.  
Интересно было бы в VBA залезть в двоичное представление Double числа и вытащить ~45 двоичных значащих цифр.  
 
А твоя функция с дробными вообще не работает ;)
 
>>А твоя функция с дробными вообще не работает ;)  
Эт да ^_^  
 
>>Интересно было бы в VBA залезть в двоичное представление Double числа и вытащить ~45 двоичных значащих цифр.  
Только по моему, эт не возможно...
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Ну почему же. Можно с использованием API, поищи по форуму "varptr","getmem4".  
А можно и средствами VBA. Есть такой малоизвестный оператор LSet.  
В файле - функция, которая возвращает массив из 8 байт, соответствующих двоичному представлению Double числа.  
Дальше - дело техники :)
 
Помню, натыкался на него (LSet), когда справочник листал. Там еще и RSet есть : )  
Только там про него написано "загружает строковое значение стр2 в стр1 с левым выравниванием" и ни чего про подобные фокусы : )  
 
Вопрос школьника: "А можно получить массив из 16 байт?" ^_^  
 
=54549=
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
Страницы: 1
Читают тему
Loading...