Easyelectronics.ru

Электроника для всех
Текущее время: 18 ноя 2019, 10:19

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



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

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

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


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

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

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


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

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


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

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 173
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
Сообщения: 680
Отлично, теперь перед каждой строчкой вашей таблички ставим if. И получается, что у вас всегда минимум одно из условий не выполняется, то есть ваш if не сработает никогда.


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

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 173
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
Сообщения: 680
Для выполнения if должно быть соблюдено условие A == 0, B == 0, A != B. Как то так.


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

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

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


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

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


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

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

_________________
unirail.org


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

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

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


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

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

_________________
unirail.org


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

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


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

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


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

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

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