Easyelectronics.ru

Электроника для всех
Текущее время: 16 окт 2018, 19:42

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 62 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: развернуть битовый массив
СообщениеДобавлено: 22 фев 2018, 14:12 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2524
Откуда: Санкт-Петербург
Не вникайте, это заведомо плохой код: требует усилий для чтения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: развернуть битовый массив
СообщениеДобавлено: 22 фев 2018, 16:21 
Заглядывает иногда

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 112
void1509 писал(а):
а чего это у вас за такой хитрый if. (выражение) == 0 != (выражение) == 0 честно говоря подобной записи не встречал.

logical XOR? привычнее известен как if (!A != !B)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: развернуть битовый массив
СообщениеДобавлено: 22 фев 2018, 16:45 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 487
Ваш пример логически понятен (в отличии от предидущего) - логически инвертированное A не равно логически инвертированному B. А вот if (A == 0 != B == 0) попробуйте дешифровать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: развернуть битовый массив
СообщениеДобавлено: 22 фев 2018, 18:37 
Заглядывает иногда

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 112
void1509 писал(а):
А вот if (A == 0 != B == 0) попробуйте дешифровать.

Все операции лево-ассоциативны и одинакового приоритета. Отсутствие скобок, конечно, напрягло аж вплоть до truth table, но у оригинального оратора скобки, к слову, наличествовуют. ;-)
Код:
А   B   А == 0    != B    == 0
0   0    1         1       0
0   1    1         0       1
1   0    0         0       1
1   1    0         1       0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: развернуть битовый массив
СообщениеДобавлено: 22 фев 2018, 19:00 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 487
Отлично, теперь перед каждой строчкой вашей таблички ставим if. И получается, что у вас всегда минимум одно из условий не выполняется, то есть ваш if не сработает никогда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: развернуть битовый массив
СообщениеДобавлено: 22 фев 2018, 19:51 
Заглядывает иногда

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 112
void1509 писал(а):
И получается, что у вас всегда минимум одно из условий не выполняется, то есть ваш if не сработает никогда.

Хорошо, приподниму "напёрстки" :-D
Код:
А   B   if (А == 0)   if (А == 0 != B)     if (А == 0 != B == 0)
0   0      1                 1                       0
0   1      1                 0                       1
1   0      0                 0                       1
1   1      0                 1                       0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: развернуть битовый массив
СообщениеДобавлено: 22 фев 2018, 20:02 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 487
Для выполнения if должно быть соблюдено условие A == 0, B == 0, A != B. Как то так.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: развернуть битовый массив
СообщениеДобавлено: 22 фев 2018, 20:59 
Старожил
Аватара пользователя

Зарегистрирован: 11 авг 2016, 20:52
Сообщения: 576
Откуда: GMT+6
void1509 писал(а):
Как то так.

Нет, не так. Для булевых А и В достаточно выполнения условия A != B


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: развернуть битовый массив
СообщениеДобавлено: 22 фев 2018, 21:13 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2364
Чуваки, да хорош уже заниматься херней. Даже если набор инструкций не имеет инструкции реверса порядка бит, то такие вещи лучше делать на ассемблерной вставке. Практически любой МК имеет инструкцию swap для полубайтов, и каждый МК имеет инструкции логического сдвига влево и вправо с признаком carry. И работать это будет гораздо быстрее тех портянок, которые вы понаписали. А самое главное, что безошибочно будет работать, без всяких сомнений типа "а нада ли !A==0 || !B != 0"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: развернуть битовый массив
СообщениеДобавлено: 22 фев 2018, 21:52 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1295
Откуда: Китай, Пекин
зачем ограничиваться вставками? на ассемблере все работает быстрее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: развернуть битовый массив
СообщениеДобавлено: 22 фев 2018, 22:26 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2364
Гыгыгы, вы видели китайский ассемблер на 15 тыс.иероглифов? Ну и где ж там быстрее то?
Я серьезно. Завязывайте это бестолковое дрочево с !B=0|A==0!=B, оно ничего особого не дает, и тем более, что вы сами не поняли как это работает.

Если разговор об алгоритме, то алгоритм в общем случае таков: серия логических сдвигов влево и вправо через бит переноса. На асме это работает быстрее (всего 16 инструкций на байт), чем эти ваши портянки с !A==0|B!=А.
А там, где есть непосредственная инструкция реверса порядка бит, то с ее помощью.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: развернуть битовый массив
СообщениеДобавлено: 25 фев 2018, 13:29 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1295
Откуда: Китай, Пекин
для не догоняющих. это был
Изображение


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 62 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB