Перейти к содержанию

Вопросы от начинающих по МК


Рекомендуемые сообщения

29 минут назад, Гость Aira сказал:

Как это понять? 

в языке Си есть такое понятие как  "приоритет операций"  Таблица 2.8.
с начала выполняется операнд с наивысшим приоритетом в конце с низшим
"~" - инверсия   имеет наивысший приоритет,
"<<" - высокий
"&" -  средний .  
первым выполняется операция в скобках
(1<<0) - "число 1 сдвинуть на 0 разрядов влево", те по сути установить бит0=1. (1<<0) = 0b00000001
вторым инверсия , к примеру был PIND= 0b01101100, стал ~PIND=0b10010011
третьим операция "поразрядное И " 0b10010011 & 0b00000001 = 0b00000001
условие if не равно нулю , выполняем действия в первых фигурных скобках.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

25 минут назад, Alex сказал:

//////////////

Поразрядные операторы сдвига предполагают, что нужно что-то сдвигать.
И нужно это что-то "дать на съедение этому оператору".
Точно также как мы "кидаем в топку дрова", чтобы было тепло.
А мы почему-то предполагаем, что это что-то уже установлено до нас кем-то в нулевой разряд...
Получается, "дрова кидать не хотим, хотим только тепло"

Повторяю:

34 минуты назад, Юрий_Нд сказал:

... и кто же это число 1 поставил в нулевой разряд?

... очень хороший человек или всё-таки "силы нам неведомые"

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, Alex сказал:

1 (единицу)

... простите, не вижу смысла продолжать.  Потому как Вы меня не слышите.

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, Юрий_Нд сказал:

... простите, не вижу смысла продолжать.

Аналогично... Ибо отвечать на вопрос "Откуда появилась единичка в нулевом разряде числа "1" ?" - глупо.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Юрий_Нд сказал:

... и кто же это число 1 поставил в нулевой разряд?
 

Юрий, скажите нам, что вы хотите сказать? (1<<0) получается 0b0000 0001 правильно же?

Ссылка на комментарий
Поделиться на другие сайты

16 минут назад, Гость Aira сказал:

получается 0b0000 0001

Не совсем так,  правильнее сказать: 
После  (1<<0) получается 0bххххххх1,  где вместо иксов то, что было раньше.
А вот почему это так получается,  ещё раз повторяю,  в этом можно только "уверовать".
Кстати у моих оппонентов тоже "не шибко складно получается",  как это всё доказать/пояснить можно.

... но у них есть проверенный прием:

1 час назад, _abk_ сказал:

Книжку почитайте.

 

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, Юрий_Нд сказал:

Не совсем так,  правильнее сказать: 
0bххххххх1,  где вместо иксов то, что было раньше.

Нет. Совсем нет. 

Запись (1<<0) буквально означает число у которого  нулевой бит установлен единицу и  больше ничего. Если написать (1<<5) это будет означать число с 5м битом,  установленным  в единицу и больше ничего.  

 

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, dasZebra сказал:

(1<<0) буквально означает число у которого  нулевой бит установлен единицу и  больше ничего.

... а я "об чем тлумачу"?

 

Вы обратили внимание, что человек  во все остальные разряды записал нолики?

 

... это по-вашему верно?

Ссылка на комментарий
Поделиться на другие сайты

16 минут назад, Юрий_Нд сказал:

0bххххххх1,  где вместо иксов то, что было раньше.

Скрытый текст

 

 

31 минуту назад, Гость Aira сказал:

(1<<0) получается 0b0000 0001 правильно же?

правильно

Ссылка на комментарий
Поделиться на другие сайты

51 минуту назад, Юрий_Нд сказал:

Не совсем так,  правильнее сказать: 
После  (1<<0) получается 0bххххххх1,  где вместо иксов то, что было раньше.
А вот почему это так получается,  ещё раз повторяю,  в этом можно только "уверовать".

Выражение (1<<0) при операнде размера байт (char, uint8_t, int8_t) обозначает именно b00000001 << 0.
Т.е., единицу сдвинуть влево на ноль позиций.
Вообще, операция (x<<y) означает "содержимое x сдвинуть влево на y позиций"
И компилятору не важно, что вы вместо x или y написали - переменную или константу.
Удивляет ваше агрессивное невежество...
Вы общаетесь тут с людьми, которые пишут на Си многие годы. Более того, некоторые могут даже обучать тех, кто учиться желает.
И вы, не зная ничего (и похоже, не желая знать), рассказываете про "уверовать". С этим вам в церковь, а не на технический форум.

И рекомендация почитать книжки - правильная.
А вот тыкаться, как слепой котенок - неверно.

Вот даже порекомендую книжку. Она простая, не толстая. И называется просто. "Язык Си".За авторством Кернигана и Ричи. Если что, это "отцы" языка. 

Изменено пользователем LiVit
Ссылка на комментарий
Поделиться на другие сайты

16 минут назад, Юрий_Нд сказал:

Вы обратили внимание, что человек  во все остальные разряды записал нолики?

 

... это по-вашему верно?

Нет никаких остальных разрядов.

Запись вида (1<<х) это двоичное число с единицей в разряде номер Х (соответственно с нулями во всех других разрядах). 

Но... (1<<0) конечно все же отличается от 0b00000001. (1<<0) это 1 и все. А например (1<<1) это не 0b00000010 а всего лишь 10. В этом глубокий смысл нотиции (згачение << номер бита).

Не благодарите.

Ссылка на комментарий
Поделиться на другие сайты

34 минуты назад, dasZebra сказал:

А например (1<<1) это не 0b00000010 а всего лишь 10.

нет, это не 10 , а 2,  в двоичном представлении для размера байт (char, uint8_t, int8_t) именно 0b00000010

Ссылка на комментарий
Поделиться на другие сайты

13 минут назад, dasZebra сказал:

В этом глубокий смысл нотиции (згачение << номер бита).

тоже нет. глубокий смысл в том, что запись вида (X<<Y) буквально означает:
число X умножить на 2 в степени Y ( X*2^Y).
в двоичном исчислении это арифметический сдвиг влево на Y бит
по мимо этого существуют еще циклический сдвиг с учетом флага переноса и   циклический сдвиг без учета флага переноса
но в Си их реализация отсутствует,  

Ссылка на комментарий
Поделиться на другие сайты

 

Этим  вот 0b00000010 оно станнет тольто тогда когда компилятор  сначала выделит память под переменную длинной 8 бит и потом туда запишит эту (1<<1) оператором присваивания: либо простым равно с очисткой всех битов, либо "вертикальная палка" и равно - с сохранением всех других битов нетронутыми.

2 минуты назад, IMXO сказал:

тоже нет. глубокий смысл в том, что запись вида (X<<Y) буквально означает:
число X умножить на 2 в степени Y ( X*2^Y).

Это Вы говорите об двоичной системе исчисления. А нотиция вида (х<<у) используется для того, что бы избежать выделения памяти под никому ненужные промежуточные переменные. 

Ссылка на комментарий
Поделиться на другие сайты

18 минут назад, dasZebra сказал:

Этим  вот 0b00000010 оно станнет тольто тогда когда компилятор  сначала выделит память под переменную длинной 8 бит и потом туда запишит эту (1<<1) оператором присваивания:

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

18 минут назад, dasZebra сказал:

Это Вы говорите об двоичной системе исчисления. А нотиция вида (х<<у) используется для того, что бы избежать выделения памяти под никому ненужные промежуточные переменные. 

да компилятору абсолютно монопенисуально в каком виде будет записана константа.
буде это 0b00000010 или (1<<1) или (1*2) результат будет один и тот же.

Ссылка на комментарий
Поделиться на другие сайты

34 минуты назад, IMXO сказал:

это все лишь ваши фантазии

Гражданин, очевидно, путает си с ассемблером. Это там написал какой-нибудь RLF F, D, процессор это и будет делать.

Изменено пользователем LiVit
Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, IMXO сказал:

это все лишь ваши фантазии, компилятор не будет создавать ни какой переменной и  ни какого выделения памяти под нее тоже не будет ,

Именно компилятор. Поэтому ФАНТАЗИИ именно что ВАШИ:    НЕЗНАЧАЩИМ БИТАМ   там взятся будет НЕОТКУДА и вот этого:

36 минут назад, IMXO сказал:

2,  в двоичном представлении для размера байт (char, uint8_t, int8_t) именно 0b00000010

ничего не будет. В нотиции (x<<x) нигде не говориться о типе данных. Поэтому никаких незначащих нулей перед единицей НЕ БУДЕТ, комманда (х<<у) не создает в памяти  переменную определяемого пользователем типа.

Ссылка на комментарий
Поделиться на другие сайты

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 и что, черт возьми, это такое - "нотиция"???
Такое ощущение, что вы пытаетесь придать своим словам солидности путем использования наукообразных слов, но выходит только хуже.
Пишите проще.

Изменено пользователем LiVit
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...