Работа с битами переменной
- Войдите на сайт для отправки комментариев
Сб, 28/01/2017 - 23:42
Помогите пожалуйста. Необходимо из одной переменной, к примеру unsigned int a = 15 (0b0000000000001111) взять к примеру третий бит и поставить его к примеру на место 15 бита переменной b такогоже типа чтобы получилось b= 0b0100000000000000. Полистал маны, но не смог понять как сделать правильно. Возможно мне подойдет bitRead() если он не слишком медленный. работать код будет на stm32f103 и крайне важна большая скорость операций.
множте на 0000000000000100+сдвиг влево на 12. помоему так, проверьте. смотрите битовые операции
int a = 0b0000000000001111; int b = 0b0100000000000000; void setup() { if (bitRead(a, 3)) bitSet(b, 15); else bitClear(b, 15); }Ну а быстрее, уже надо переходить на ассемблер.
Если не ошибся
Вот на мэйле подсказали, b |= (a & (1 << 3)) << 11;
Только не могу понять что за единица в скобках
ТС следовало бы определиться, какой именно бит двигать (написано 15-й, а в образце фигурирует 14-й), а также что делать с остальными битами.
2qwone: Отнюдь. То, что быстре, записано в посте №3.
2alex0: Ну Вы же один бит собрались двигать. И, судя по коду, двигаете его на место 14-го, а не 15-го. При этом желаемый результат получится лишь в том случае, если переменная b == 0.
ТС следовало бы определиться, какой именно бит двигать (написано 15-й, а в образце фигурирует 14-й), а также что делать с остальными битами.
Третий бит переменной a на место 15 бита переменной b
alex0:
1. И в предъявленном образце, и в рекомендованном коде - 14-й.
2. Вы так и не написали, что делать с остальными битами числе b кроме 14-го. В рекомендованном коде они остаются без изменения, а в предложенном Вами образце - обнуляются.
2qwone: Отнюдь. То, что быстре, записано в посте №3.
Там ошибка . Нужный бит в переменной b надо обнулить, а потом наложить.
Как положить слона в холодильник в 3 действия : открыть дверь, положить слона, закрыть дверь.
Как положить бегемота в холодильник в 4 действия :открыть дверь, вытащить слона,положить бегемота ,закрыть дверь.
alex0:
1. И в предъявленном образце, и в рекомендованном коде - 14-й.
2. Вы так и не написали, что делать с остальными битами числе b кроме 14-го. В рекомендованном коде они остаются без изменения, а в предложенном Вами образце - обнуляются.
Никак не могу понять откуда вы берете четырнадцатый.
В целом должно работать так, переменной A с 10 до 15 встают на места с 7 по 2 в переменной B, потом с переменной C (byte) все её 8 бит занимают места с 15 по 8 в переменной B.
Вообще я хочу понять как выцепить определенный бит и поставить его на нужное место
http://arduino.su/Reference/BitwiseAnd
Побитовое И (&) и маской очищаем
Сдвигами >> << двигаем
Побитовое ИЛИ (|) накладываем
В целом должно работать так, переменной A с 10 до 15 встают на места с 7 по 2 в переменной B, потом с переменной C (byte) все её 8 бит занимают места с 15 по 8 в переменной B.
Вообще я хочу понять как выцепить определенный бит и поставить его на нужное место
Сейчас еще такая идея родилась. Именно для вытаскивания по битам...