Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Реверс двоичного числа
 
Собственно как из 10010001  сделать число 10001001, т.е развернуть задом наперёд? средствами  программы
 
=СУММПРОИЗВ(ПСТР(A1;1+ДЛСТР(A1)-СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)*10^(ДЛСТР(A1)-СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)))))
Изменено: АlехМ - 15 Мар 2018 20:05:59
Алексей М.
 
woodhousel,  давайте начнем с того, что это строка или число и что нужно получить, строку или число?

например для строки достаточно https://msdn.microsoft.com/en-us/library/8ycf85wx(v=vs.84).aspx
 
Ссылка
Никаких врагов, зато и никаких друзей.
 
Из числа - число
 
См.
 
Намудрил вот так  
 
woodhousel, вам сообщение №2 не видно?
Алексей М.
 
Спасибо, тоже работает
 
думаю что также как у АlехМ,
=SUMPRODUCT(MID(E2;ROW(A$1:INDEX(A:A;LEN(E2)));1)*10^(ROW(A$1:INDEX(A:A;LEN(E2)))-1))

А зачем промежуток DEC?
 
Есть один алгоритм  из HEX to HEX

#     HEX -> DEC -> BIN

      0F -> 15 -> 0000 1111

#     BIN -> DEC -> HEX

1111 0000 -> 240 -> F0

 
Может есть способ проще провернуть эту конвертацию?
 

Проще  , а как, если сама суть в перевертывании разрядов двоичного?  В одной формуле - да
=BIN2HEX(SUMPRODUCT(MID(HEX2BIN(C2);ROW(A$1:INDEX(A:A;LEN(HEX2BIN(C2))));1)*10^(ROW(A$1:INDEX(A:A;LEN(HEX2BIN(C2))))-1)))
Изменено: БМВ - 15 Мар 2018 20:42:56
 
АlехМ, Сработал стереотип двоичного счисления? С младшего разряда считать? :-)
 
Для Excel нет ничего невозможного!
Изменено: woodhousel - 15 Мар 2018 21:15:25
 
Цитата
woodhousel написал:
Для Excel нет ничего невозможного!
Есть, но тогда приходит VBA, а если и это не помогло, значит никому это ненужно.

P.S. Цитатку в #15 подсократите, пока модератор замечание не сделал.
 
Функция
Код
Function Bin_Rev(iString As String) As String
    Dim a() As Byte, i As Long
    a() = StrConv(iString, vbFromUnicode)
    For i = 0 To UBound(a)
         Bin_Rev = Chr(a(i)) & Bin_Rev
    Next
End Function
Алексей М.
 
Пару своих копеек:
=-СУММ(-(ПСТР(A1;СТРОКА(A1:ИНДЕКС(A:A;ДЛСТР(A1)));1)&"E"&(СТРОКА(A1:ИНДЕКС(A:A;ДЛСТР(A1)))-1)))
 
АlехМ, Мотя, ну проще ж все
Код
Function binRev(strBin)
 binRev = StrReverse(strBin)
End Function
или что не учитываю?
 
БМВ, проще.  :)
Что-то с памятью моей стало...
Алексей М.
 
Если само число в виде строки, то да - строковые функции в помощь. Интереснее, когда из одного/группы байтов делать подобный реверс)
Код
Function ByteRev(ByVal iByte As Byte) As Byte
Dim a As Byte, b As Byte, aa As Byte, bb As Byte, cc As Byte
b = 8: aa = 255: bb = 0
For a = 0 To 7
  aa = aa Xor (2 ^ a)
  cc = iByte Or aa Xor aa
  If cc > 0 Then bb = bb Or (2 ^ (b - 1))
  b = b - 1: aa = 255
Next
ByteRev = bb
End Function
Изменено: Anchoret - 15 Мар 2018 22:21:27
 
Цитата
Anchoret написал:
Интереснее, когда из одного/группы байтов делать подобный реверс)
Интересно , особенно то как выглядит это в иходных даных и в конечных, и почему в промежутке не может быть строки, ведь мою мысль я вам тоже через строку передаю, а она всего лишь промежуточный формат that can be readable and not always understandable for everybody.  

ну давайте с битами поработаем в двухбайтовом числом, плнятно что их из отображаемого 00-FF перевод в десятичное это формальность Excel
=SUMPRODUCT((BITAND(D3;2^(ROW($A$1:$A$8)-1))=2^(ROW($A$1:$A$8)-1))*2^(8-ROW($A$1:$A$8)))
 
А если 00000000 или 100000000?
Для одинаковой разрядности:
=ТЕКСТ(СУММ(ПСТР(A1;{1;2;3;4;5;6;7;8};1)*10^{0;1;2;3;4;5;6;7});"00000000")
 
Цитата
Anchoret написал:
Интереснее, когда из одного/группы байтов делать подобный реверс
Тогда уж так (примерно в 10 раз быстрее)
Код
Function ByteRev1(iByte As Byte) As Byte
Dim a&, b&, c&
  c = iByte
  For a = 0 To 7
    b = b * 2 + (c And 1)
    c = c \ 2
  Next
  ByteRev1 = b
End Function
 
Пардон за офф...
Мне иногда кажется, что это именно Казанский, придумал Excel.
 
vikttur, согласно теме -вроде нули не важны, тем более, при дальнейшем в HEX.  
Страницы: 1
Читают тему (гостей: 1)