битовый сдвиг массива байтов

double1
Offline
Зарегистрирован: 04.07.2016

вот есть массив

byte b[x];

00010010 00101101 00010101 11100101....

есть ли простой способ сдвинуть биты всего массива влево, убрав предыдущие нули? чтобы стало

10010001 01101000 10101111 00101000....

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

но может есть проще вариант, чтоб не выделять память под дублирующий массив и двинуть все разом на нужное количество бит, как << и >> операторы?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вообще-то дублирующий массив не нужен. Просто в цикле брать некоторое количество бит в одном месте и складывать их в другое.

double1
Offline
Зарегистрирован: 04.07.2016

я думал, может как-то с указателями можно красиво сделать. но указателей на конкретный бит нет же..

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Сдвиг на сколько битов нужен? На три, как в примере? Или на другое количество?

double1
Offline
Зарегистрирован: 04.07.2016

Да, на три. может и другое количество будет по факту данных, но в пределах 8 бит, так как полные нулевые 0b00000000 в начале я сразу убираю 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А длина массива? Фиксированная или может быть любой?

double1
Offline
Зарегистрирован: 04.07.2016

100 байт всего.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не, тогда надо честно делать, как коллега подсказывал. Ничего тут не придумаешь. Сто байтов уж больно много.

Я то думал там два-три-пять. Можно было бы просто поставить сдвиговые регистры каскадом. И сдвигать умеют сразу по всему каскаду, и места в памяти не занимают - они сами память. Но 100 сдвиговых регистров - перебор.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Не, тогда надо честно делать, как коллега подсказывал. Ничего тут не придумаешь. Сто байтов уж больно много.

Я то думал там два-три-пять. Можно было бы просто поставить сдвиговые регистры каскадом. И сдвигать умеют сразу по всему каскаду, и места в памяти не занимают - они сами память. Но 100 сдвиговых регистров - перебор.

Евгений Петрович, что-то как то Вы сразу сдались, каких то несчастных сто байт )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

как то Вы сразу сдались, каких то несчастных сто байт )))

Старею.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

ua6em пишет:

как то Вы сразу сдались, каких то несчастных сто байт )))

Старею.

Троллите ))) Да ну бросьте ))) Цикл числом в 100 двойной точности не одолеете ???
Там десяток команд на ассемблере жеж

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

Троллите ))) Да ну бросьте ))) Цикл числом в 100 двойной точности не одолеете ???

Там десяток команд на ассемблере жеж

Ну, Вы поймите, это проза. Скучная, рутинная проза. А вот присобачить сдвиговые регистры и сдвигать (а заодно и хранить) всё в них ... Помните у Владимира Семёновича: «Нет острых ощущений. Всё старьё, гнильё и хлам. Того гляди с тоски сыграю в ящик. Балкон бы что-ли сверху иль автобус пополам – вот это «боле-мене» подходяще».

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

ua6em пишет:

Троллите ))) Да ну бросьте ))) Цикл числом в 100 двойной точности не одолеете ???

Там десяток команд на ассемблере жеж

Ну, Вы поймите, это проза. Скучная, рутинная проза. А вот присобачить сдвиговые регистры и сдвигать (а заодно и хранить) всё в них ... Помните у Владимира Семёновича: «Нет острых ощущений. Всё старьё, гнильё и хлам. Того гляди с тоски сыграю в ящик. Балкон бы что-ли сверху иль автобус пополам – вот это «боле-мене» подходяще».

Понял, в электронику вдарились )))

Как-то мне племянник, в бытность студент Бауманки, спрашивает, вот вы дядя знаете чем отличается D триггер от JK, ну естественно говорю, один тактируется фронтом сигнала, другой спадом...ВО-ВО...а я эту муть должен учить ))) а  мне, молотобойцу, это учить было без надобности, интерес был )))

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

ЕвгенийП пишет:

ua6em пишет:

Троллите ))) Да ну бросьте ))) Цикл числом в 100 двойной точности не одолеете ???

Там десяток команд на ассемблере жеж

Ну, Вы поймите, это проза. Скучная, рутинная проза. А вот присобачить сдвиговые регистры и сдвигать (а заодно и хранить) всё в них ... Помните у Владимира Семёновича: «Нет острых ощущений. Всё старьё, гнильё и хлам. Того гляди с тоски сыграю в ящик. Балкон бы что-ли сверху иль автобус пополам – вот это «боле-мене» подходяще».

В точку! (выделил жирным шрифтом). Точно, стареем ;)

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

kisoft пишет:

ЕвгенийП пишет:

ua6em пишет:

Троллите ))) Да ну бросьте ))) Цикл числом в 100 двойной точности не одолеете ???

Там десяток команд на ассемблере жеж

Ну, Вы поймите, это проза. Скучная, рутинная проза. А вот присобачить сдвиговые регистры и сдвигать (а заодно и хранить) всё в них ... Помните у Владимира Семёновича: «Нет острых ощущений. Всё старьё, гнильё и хлам. Того гляди с тоски сыграю в ящик. Балкон бы что-ли сверху иль автобус пополам – вот это «боле-мене» подходяще».

В точку! (выделил жирным шрифтом). Точно, стареем ;)

 

Одолела рутинная проза, тогда лекции о проектировании и производстве ASIC от Юрия Панчула вам в интерес или тексты парсить без процессора и без софтвера, ХАРД, жёсткий ХАРД )))

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Сдвиг массива надо делать 3D принтером, там легко

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

kisoft пишет:

Сдвиг массива надо делать 3D принтером, там легко

так не у всех есть такая игрушка

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

 или тексты парсить без процессора и без софтвера, ХАРД, жёсткий ХАРД )))

Там в самом начале написано: "Внутри Ардуино стоит вполне фон-неймановский процессор". Дальше читать не стал :(

Pyotr
Offline
Зарегистрирован: 12.03.2014

Тож пофлужу)
Эх, парни)).. Столько умов пропадает без дела))) Вас бы да на мои проекты...)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А в чём проблема? "Договор есть продукт при поном непротивлении сторон" :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

ua6em пишет:

 или тексты парсить без процессора и без софтвера, ХАРД, жёсткий ХАРД )))

Там в самом начале написано: "Внутри Ардуино стоит вполне фон-неймановский процессор". Дальше читать не стал :(

А напрасно, далее идёт описание как парсить текст чистой логикой (561ЛА7&...) )))

. ...Нет, я имею в виду парсинг текста устройством, состоящим из логических элементов И-ИЛИ-НЕ и Д-триггерами, как на картинке ниже...

а каково начало текста: А?
кто-то парсирует текстовый файл программой на Питоне, другой пишет скрипт с регулярными выражениями на Перле, Си-программист стыдливо возится с буферами и указателями, иногда применяя Yacc и Lex.
 

ssss
Offline
Зарегистрирован: 01.07.2016

ua6em пишет:

ХАРД, жёсткий ХАРД )))

Да не вопрос, типа совсем! Берём за полкопейки какойнить СТМ32Ф0 и тупо вырываем по четыре байта за раз. 25 операций сдвига на все 100 байт и 25 операций маски + туда-сюда при 48МГц за пару мкс легко одолевается. Ну и уж если полный ХАРД, типа РОКнРОЛЛ - юзаем СПИ. Первые три клока тупо отсекаем таймером хардварно, недостающие в конце биты - добиваем лишней транзакцией СПИ. Итого - 50+1 (16 бит) транзакция по СПИ это порядка 5 микросекунд. Если врубить ФУЛЛ-ХАРД-РОКнРОЛЛ в виде ДМА, то этого печального события, на фоне остального армагеддона, можно вообще и не заметить.

Pyotr
Offline
Зарегистрирован: 12.03.2014

ЕвгенийП пишет:

А в чём проблема? "Договор есть продукт при поном непротивлении сторон" :)

Это была хоть и шутка, но с большой долей правды. Намёк понял. Добавлю без шуток - хотелось бы чтоб у моих детей был такой дед.

Евгений, проблема в алгоритмах. Вы знаете - я делаю автоматику для теплиц. Это очень специфичная тема. Пытаю коллег на Гринтоке, книжки умные изучаю... Процесс идёт. Без чёткого алгоритма и толку нет обращаться к спецам. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Pyotr пишет:

ЕвгенийП пишет:

А в чём проблема? "Договор есть продукт при поном непротивлении сторон" :)

Это была хоть и шутка, но с большой долей правды. Намёк понял. Добавлю без шуток - хотелось бы чтоб у моих детей был такой дед.

Евгений, проблема в алгоритмах. Вы знаете - я делаю автоматику для теплиц. Это очень специфичная тема. Пытаю коллег на Гринтоке, книжки умные изучаю... Процесс идёт. Без чёткого алгоритма и толку нет обращаться к спецам. 

Пётр, всё давно уже сделано и для теплиц и для курятников, по последним к примеру средний сдаточный вес по курам был 2,5 килограмма, 10 % особей 4,5 килограмма, это за 56 дней техпроцесса (от суточного циплёнка), по теплицам мой приятель занимался, с карты гугла гляньте - посёлок Московский КЧР...

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016
for(i=7;i>=0;i--){
  led_state[i]<<=1;        // shift current byte left
  if(i>0) bitWrite(led_state[i-1],0,bitRead(led_state[i],7));  // copy next MSB to prev LSB
}
bitWrite(led_state[7],digitalRead(led_pin_in),0);   // overwrite rightmost LSB

как 8 поменять на сотню, надеюсь понятно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

а каково начало текста: А?

кто-то парсирует текстовый файл программой на Питоне, другой пишет скрипт с регулярными выражениями на Перле, Си-программист стыдливо возится с буферами и указателями, иногда применяя Yacc и Lex.

Не, ну не для меня. Я старый человек и точно знаю, что настоящие программитсы пишут на Фортране. «Если вы не можете выполнить эти работы на Фортране, выполните их на ассемблере. Если же их нельзя выполнить на ассемблере, их не стоит делать вообще»

Pyotr
Offline
Зарегистрирован: 12.03.2014

ua6em пишет:

Пётр, всё давно уже сделано и для теплиц и для курятников...

Оборудование для многогектарных теплиц не подходит для небольших. Или есть примеры и для фермеских?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Pyotr пишет:

ua6em пишет:

Пётр, всё давно уже сделано и для теплиц и для курятников...

Оборудование для многогектарных теплиц не подходит для небольших. Или есть примеры и для фермеских?

Это кто Вам такое сказал?
Вы знаете к примеру, что коммутатор сотовой связи сделан на I-386 процессорах, и нормально, справляется

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

ua6em пишет:

а каково начало текста: А?

кто-то парсирует текстовый файл программой на Питоне, другой пишет скрипт с регулярными выражениями на Перле, Си-программист стыдливо возится с буферами и указателями, иногда применяя Yacc и Lex.

Не, ну не для меня. Я старый человек и точно знаю, что настоящие программитсы пишут на Фортране. «Если вы не можете выполнить эти работы на Фортране, выполните их на ассемблере. Если же их нельзя выполнить на ассемблере, их не стоит делать вообще»

Настоящие программисты пишут на Ямбе )))  а вот настоящие системные программисты на ассемблере

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

Настоящие программисты пишут на Ямбе )))  а вот настоящие системные программисты на ассемблере

Чего?????? .... как там говорила бессмертная Эллочка Щукина? .... "Не учите меня жить, парниша!" :)))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Voodoo Doll пишет:

for(i=7;i>=0;i--){
  led_state[i]<<=1;        // shift current byte left
  if(i>0) bitWrite(led_state[i-1],0,bitRead(led_state[i],7));  // copy next MSB to prev LSB
}
bitWrite(led_state[7],digitalRead(led_pin_in),0);   // overwrite rightmost LSB

как 8 поменять на сотню, надеюсь понятно.

Не, не одолею...
в ассемблере то всё понятно, делаем сдвиг двойной точности, а сохраняем один байт ))) так как в другом - мусор

Pyotr
Offline
Зарегистрирован: 12.03.2014

ua6em пишет:

Pyotr пишет:

Оборудование для многогектарных теплиц не подходит для небольших. Или есть примеры и для фермеских?

Это кто Вам такое сказал?
Вы знаете к примеру, что коммутатор сотовой связи сделан на I-386 процессорах, и нормально, справляется

Ценником не подходит и сложностью в управлении. Там оператор спецкурсы проходит.

Чтобы не оффтопить, если есть интерес продолжать, то пожалуйте в мою тему 
http://arduino.ru/forum/ishchu-ispolnitelya/upravlenie-mikroklimatom-tep...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

ua6em пишет:

Настоящие программисты пишут на Ямбе )))  а вот настоящие системные программисты на ассемблере

Чего?????? .... как там говорила бессмертная Эллочка Щукина? .... "Не учите меня жить, парниша!" :)))

Ездит тут у нас один на велосипеде, молодильных яблочек наелсси, он еще на ямбе писал...
И это не шутка, никогда не скажешь, что ему за 70, ну сороковник еще дать можно, но не более
ЗЫ а профессора Торопцева учили паскалю, когда ему было под 90, очень увлекательная вещь сказал )))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Pyotr пишет:

ua6em пишет:

Pyotr пишет:

Оборудование для многогектарных теплиц не подходит для небольших. Или есть примеры и для фермеских?

Это кто Вам такое сказал?
Вы знаете к примеру, что коммутатор сотовой связи сделан на I-386 процессорах, и нормально, справляется

Ценником не подходит и сложностью в управлении. Там оператор спецкурсы проходит.

Чтобы не оффтопить, если есть интерес продолжать, то пожалуйте в мою тему 
http://arduino.ru/forum/ishchu-ispolnitelya/upravlenie-mikroklimatom-tep...

Мне сегодня ЦАП пришёл, так что буду модернизировать свой контроллер, с ШИМом не задалось, как хотелось бы, а у вас там уже два года строится, думаю всё что хотелось - реализовали

valerivp
Offline
Зарегистрирован: 13.04.2017

a[i]=(a[i] сдвиг влево n)|(a[i+1] сдвиг вправо (8-n))

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Первый байт обязательно содержит единицу, хотя бы одну или может состоять из всех нулей тоже? Сколько таких нулевых байтов может быть первыми? :)