Работа с битами
- Войдите на сайт для отправки комментариев
Вс, 03/01/2016 - 21:43
В принципе вопрос плёвый , не могу найти в справочниках реверс бита.
Подскажите плиз. есть такой оператор?
В принципе вопрос плёвый , не могу найти в справочниках реверс бита.
Подскажите плиз. есть такой оператор?
^
a ^= 1 << 3;
если я не ошибаюсь то это сдвиг, а мне нужен реверс бита , имеется битовая маска, необходимо выполнить реверс одного бита, не трогая остальные
Не ошибаешься и ошибаешься тоже. :) Это сокращенная запись операции. В переменной а будет инвертироваться третий бит, лагодаря знакам ^= . А на счет сдвига ты прав 1 << 3 это 1 свигается в третий разряд.
IUS, как вариант "без сдвига" :-) a^=B00001000;
^ - оператор XOR, ~ - оператор отрицания
http://atmel.ucoz.ru/publ/pobitovye_operacii/1-1-0-27
http://atmel.ucoz.ru/publ/pobitovoe_otricanie/1-1-0-28
ЕвгенийП,
if (n | MASK) - условие всегда == TRUE, и весь этот if оптимизируется до простого n &= ~MASK;
Похоже, AND занимает чуть меньше места, чем XOR.
Приличные компиляторы, вообще-то, в таких случаях выдают предупреждение. :)
if (n & MASK) должно быть, конечно.
Одно не понимаю, зачем учить дрифту человека, впервые севшего за руль.
Пусть сначала поймёт как просто рулить, а потом будет дрифтовать.
Видно пора валить с форума, дабы не тратить время впустую.
if (n | MASK) - условие всегда == TRUE,
if (n & MASK) должно быть, конечно.
Ой, блин, это я чёй-то ступил, сорри. Конечно же, Вы правы.
Сотру тот свой пост, чтобы случайно кто-то за "истину" не воспринял.
Спасибо JacKo
На данный момент более чем исчерпывающий ответ , я разобрался. сразу.
Решил вопрос немного по своему , но всё-же вот часть кода всего таких проверочек 24.
if (StrContains(HTTP_req, "NF=10")) NF_Taim[0] = NF_Taim[0] ^ 1; if (StrContains(HTTP_req, "NF=11")) NF_Taim[0] = NF_Taim[0] ^ 2; if (StrContains(HTTP_req, "NF=12")) NF_Taim[0] = NF_Taim[0] ^ 4; if (StrContains(HTTP_req, "NF=13")) NF_Taim[0] = NF_Taim[0] ^ 8;А на счет всего остольного, без практики всё равно не запомню.