IMXO Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 29 минут назад, Гость Aira сказал: Как это понять? в языке Си есть такое понятие как "приоритет операций" Таблица 2.8. с начала выполняется операнд с наивысшим приоритетом в конце с низшим "~" - инверсия имеет наивысший приоритет, "<<" - высокий "&" - средний . первым выполняется операция в скобках (1<<0) - "число 1 сдвинуть на 0 разрядов влево", те по сути установить бит0=1. (1<<0) = 0b00000001 вторым инверсия , к примеру был PIND= 0b01101100, стал ~PIND=0b10010011 третьим операция "поразрядное И " 0b10010011 & 0b00000001 = 0b00000001 условие if не равно нулю , выполняем действия в первых фигурных скобках. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Aira Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 Щас на бумаге еще раз расписал, получается PIND0 уже инвертировано ждёт да? Потом тока накладывается &0b00000001? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Alex Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 3 минуты назад, Гость Aira сказал: PIND0 уже инвертировано ждёт да? Кого ждёт ? Где ? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Гость Aira Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 Первым выполняется. Спасибо, что обьяснили. Я то шёл подряд справа налево. Почитаю про приоритеты. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Юрий_Нд Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 30 минут назад, IMXO сказал: "число 1 сдвинуть на 0 разрядов влево" ... и кто же это число 1 поставил в нулевой разряд? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 @Юрий_Нд , 1 (единицу) двинули 0 (ноль) раз влево. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Юрий_Нд Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 25 минут назад, Alex сказал: ////////////// Поразрядные операторы сдвига предполагают, что нужно что-то сдвигать. И нужно это что-то "дать на съедение этому оператору". Точно также как мы "кидаем в топку дрова", чтобы было тепло. А мы почему-то предполагаем, что это что-то уже установлено до нас кем-то в нулевой разряд... Получается, "дрова кидать не хотим, хотим только тепло" Повторяю: 34 минуты назад, Юрий_Нд сказал: ... и кто же это число 1 поставил в нулевой разряд? ... очень хороший человек или всё-таки "силы нам неведомые" 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 1 минуту назад, Юрий_Нд сказал: Повторяю: Отвечаю : Цитата 1 (единицу) двинули 0 (ноль) раз влево. Что получится ? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Юрий_Нд Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 (изменено) 2 минуты назад, Alex сказал: 1 (единицу) ... простите, не вижу смысла продолжать. Потому как Вы меня не слышите. Изменено 5 ноября, 2021 пользователем Юрий_Нд 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 4 минуты назад, Юрий_Нд сказал: ... простите, не вижу смысла продолжать. Аналогично... Ибо отвечать на вопрос "Откуда появилась единичка в нулевом разряде числа "1" ?" - глупо. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
_abk_ Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 22 minutes ago, Юрий_Нд said: ... очень хороший человек или всё-таки "силы нам неведомые" Смешно. Книжку почитайте. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Aira Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 1 час назад, Юрий_Нд сказал: ... и кто же это число 1 поставил в нулевой разряд? Юрий, скажите нам, что вы хотите сказать? (1<<0) получается 0b0000 0001 правильно же? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Юрий_Нд Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 (изменено) 16 минут назад, Гость Aira сказал: получается 0b0000 0001 Не совсем так, правильнее сказать: После (1<<0) получается 0bххххххх1, где вместо иксов то, что было раньше. А вот почему это так получается, ещё раз повторяю, в этом можно только "уверовать". Кстати у моих оппонентов тоже "не шибко складно получается", как это всё доказать/пояснить можно. ... но у них есть проверенный прием: 1 час назад, _abk_ сказал: Книжку почитайте. Изменено 5 ноября, 2021 пользователем Юрий_Нд 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
dasZebra Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 3 минуты назад, Юрий_Нд сказал: Не совсем так, правильнее сказать: 0bххххххх1, где вместо иксов то, что было раньше. Нет. Совсем нет. Запись (1<<0) буквально означает число у которого нулевой бит установлен единицу и больше ничего. Если написать (1<<5) это будет означать число с 5м битом, установленным в единицу и больше ничего. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Юрий_Нд Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 4 минуты назад, dasZebra сказал: (1<<0) буквально означает число у которого нулевой бит установлен единицу и больше ничего. ... а я "об чем тлумачу"? Вы обратили внимание, что человек во все остальные разряды записал нолики? ... это по-вашему верно? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 16 минут назад, Юрий_Нд сказал: 0bххххххх1, где вместо иксов то, что было раньше. Скрытый текст 31 минуту назад, Гость Aira сказал: (1<<0) получается 0b0000 0001 правильно же? правильно 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
LiVit Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 (изменено) 51 минуту назад, Юрий_Нд сказал: Не совсем так, правильнее сказать: После (1<<0) получается 0bххххххх1, где вместо иксов то, что было раньше. А вот почему это так получается, ещё раз повторяю, в этом можно только "уверовать". Выражение (1<<0) при операнде размера байт (char, uint8_t, int8_t) обозначает именно b00000001 << 0. Т.е., единицу сдвинуть влево на ноль позиций. Вообще, операция (x<<y) означает "содержимое x сдвинуть влево на y позиций" И компилятору не важно, что вы вместо x или y написали - переменную или константу. Удивляет ваше агрессивное невежество... Вы общаетесь тут с людьми, которые пишут на Си многие годы. Более того, некоторые могут даже обучать тех, кто учиться желает. И вы, не зная ничего (и похоже, не желая знать), рассказываете про "уверовать". С этим вам в церковь, а не на технический форум. И рекомендация почитать книжки - правильная. А вот тыкаться, как слепой котенок - неверно. Вот даже порекомендую книжку. Она простая, не толстая. И называется просто. "Язык Си".За авторством Кернигана и Ричи. Если что, это "отцы" языка. Изменено 5 ноября, 2021 пользователем LiVit 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
dasZebra Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 16 минут назад, Юрий_Нд сказал: Вы обратили внимание, что человек во все остальные разряды записал нолики? ... это по-вашему верно? Нет никаких остальных разрядов. Запись вида (1<<х) это двоичное число с единицей в разряде номер Х (соответственно с нулями во всех других разрядах). Но... (1<<0) конечно все же отличается от 0b00000001. (1<<0) это 1 и все. А например (1<<1) это не 0b00000010 а всего лишь 10. В этом глубокий смысл нотиции (згачение << номер бита). Не благодарите. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 34 минуты назад, dasZebra сказал: А например (1<<1) это не 0b00000010 а всего лишь 10. нет, это не 10 , а 2, в двоичном представлении для размера байт (char, uint8_t, int8_t) именно 0b00000010 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 13 минут назад, dasZebra сказал: В этом глубокий смысл нотиции (згачение << номер бита). тоже нет. глубокий смысл в том, что запись вида (X<<Y) буквально означает: число X умножить на 2 в степени Y ( X*2^Y). в двоичном исчислении это арифметический сдвиг влево на Y бит по мимо этого существуют еще циклический сдвиг с учетом флага переноса и циклический сдвиг без учета флага переноса но в Си их реализация отсутствует, 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
dasZebra Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 Этим вот 0b00000010 оно станнет тольто тогда когда компилятор сначала выделит память под переменную длинной 8 бит и потом туда запишит эту (1<<1) оператором присваивания: либо простым равно с очисткой всех битов, либо "вертикальная палка" и равно - с сохранением всех других битов нетронутыми. 2 минуты назад, IMXO сказал: тоже нет. глубокий смысл в том, что запись вида (X<<Y) буквально означает: число X умножить на 2 в степени Y ( X*2^Y). Это Вы говорите об двоичной системе исчисления. А нотиция вида (х<<у) используется для того, что бы избежать выделения памяти под никому ненужные промежуточные переменные. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 18 минут назад, dasZebra сказал: Этим вот 0b00000010 оно станнет тольто тогда когда компилятор сначала выделит память под переменную длинной 8 бит и потом туда запишит эту (1<<1) оператором присваивания: это все лишь ваши фантазии, компилятор не будет создавать ни какой переменной и ни какого выделения памяти под нее тоже не будет , потомушта это константа и ее значение будет вычислено еше на моменте компиляции и помещено в память программ в виде команды 18 минут назад, dasZebra сказал: Это Вы говорите об двоичной системе исчисления. А нотиция вида (х<<у) используется для того, что бы избежать выделения памяти под никому ненужные промежуточные переменные. да компилятору абсолютно монопенисуально в каком виде будет записана константа. буде это 0b00000010 или (1<<1) или (1*2) результат будет один и тот же. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
LiVit Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 (изменено) 34 минуты назад, IMXO сказал: это все лишь ваши фантазии Гражданин, очевидно, путает си с ассемблером. Это там написал какой-нибудь RLF F, D, процессор это и будет делать. Изменено 5 ноября, 2021 пользователем LiVit 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
dasZebra Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 2 минуты назад, IMXO сказал: это все лишь ваши фантазии, компилятор не будет создавать ни какой переменной и ни какого выделения памяти под нее тоже не будет , Именно компилятор. Поэтому ФАНТАЗИИ именно что ВАШИ: НЕЗНАЧАЩИМ БИТАМ там взятся будет НЕОТКУДА и вот этого: 36 минут назад, IMXO сказал: 2, в двоичном представлении для размера байт (char, uint8_t, int8_t) именно 0b00000010 ничего не будет. В нотиции (x<<x) нигде не говориться о типе данных. Поэтому никаких незначащих нулей перед единицей НЕ БУДЕТ, комманда (х<<у) не создает в памяти переменную определяемого пользователем типа. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
LiVit Опубликовано 5 ноября, 2021 Поделиться Опубликовано 5 ноября, 2021 (изменено) 34 минуты назад, dasZebra сказал: ничего не будет. В нотиции (x<<x) нигде не говориться о типе данных. Поэтому никаких незначащих нулей перед единицей НЕ БУДЕТ, комманда (х<<у) не создает в памяти переменную определяемого пользователем типа. Компилятор, дорогой гражданин, немного умнее вас будет. И размерность данных будет подогнана под контекст. Сравните: for(uint8_t c=1; c<10; c= c<<1) и for(uint16_t c = 1; c<10; c = c<<1) В первом случае, по ходу выполнения цикла будет так: b00000001, b00000010, b00000100 Во втором случае так: b0000000000000001, b0000000000000010, b0000000000000100 Тоже самое, компилятор разберется и в таком случае: uint8_t a; uint16_t b; a = (1<<2); //a = b00000100 b = (1<<2); //b = b0000000000000100 PS и что, черт возьми, это такое - "нотиция"??? Такое ощущение, что вы пытаетесь придать своим словам солидности путем использования наукообразных слов, но выходит только хуже. Пишите проще. Изменено 5 ноября, 2021 пользователем LiVit 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.