Help Побитовые операции
- Войдите на сайт для отправки комментариев
Чт, 06/11/2014 - 03:52
Нахожусь на начальном этапе освоения IDE Arduino/
растолкуйте кто может пару строк в скетче касательно побитовой посылки 12 бит данных в ЦАП.
for(int i=11; i>=0; i--) / /send the 12 bit sample data
ЗДЕСЬ ПОНЯТНО- i принимет значение от 11 до 0
{
digitalWrite(DATA, (value & (1 << i) ) >> i ); //DATA ready
Эту стоку не могу понять в упор
.
.
.}
Может кто знает источник где можно потренироваться с подобными примерами, хитро закрученными выражениями.
Еще 100500 одинаковых тем создай.
<< и >> - это побитовое смешение или умножение/деление на 2.
Уважаемый Radjah,
Первый раз на Вашем форуме и движок форума несколько необычный. Поэтому темы создались не по моему злому умыслу.Пока разбрался как создавать они создались. Удалить к сожалению нет возможности. Потому прошу модератора удалить мусор.
Что касается Вашего ответа то к сожалению не понял. Если не затруднит то более подробно. Я знаю что >> это оператор смещения содержтимого байта в лево или вправо и соответственно умножение/деление. Мне не понятно сама структура строки.
Скобок там не четное количество. Сама переменная value в моем премере не определена нигде кроме этой строки , но компилятор не дает ошибки. Извините если гдето туплю. Опыта мало.
скобок четное . можно записать так. вроде должно получится тоже самое
все очень просто
digitalWrite - записывает бит в 0 или 1, но именно бит. У вас задача установить 1-ну ногу контроллера поочередно во все состояния бит в числе А (допусти 5). Для этого вы должны выделить поочередно все биты числа А (А & 1; A & 2; A & 4; A & 8 и т.д.), для этого вы сдвигаете в лево 1 (на 0 это 1; на 1 это 2; на 2 это 4 и т.д.). И так бит выделен допустим второй, но результат 4, а вам в digitalWrite нужно записат 0 или 1. Для этого результат операции & нужно сдвинуть в право на столько же бит на сколько 1 мы сдвигали в лево 4 >> 2 даст 1, которую вы и установите digitalWrite.
А потому что понапишут примеров - действительно фиг пойми что...
Проще же надо, проще.
Только насчёт "value нигде не определена" - это что, правда? Это я не знаю, это надо попробовать самому скомпилить. Определена где-нибудь, конечно, надо только найти где.
Пользуясь темой спрошу, сохраняется ли последняя оставшаяся единица при сдвиге?
Например:
0b10000000<<1 будет равно 0b00000001 или 0b00000000?
то же самое и в другую сторону - 0b00000001>>0 - ноль или 0b10000000?
Если ноль, т. о. не сохраняется, то включается ли это? Где и как?
насколько помню пропадает. но точно не скажу