реклама на сайте
подробности

 
 
> Поменять местами биты в байте.
ps1x
сообщение May 9 2007, 09:43
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Допустим есть

0bXY000000.

Как сделать

0bYX000000?

Надо использовать битовые маски и логические операции, только вот с масками никак не разберусь...

И еще, есть ли в CVAVR функция, возвращающая № буквы, т.е. типа chr("a")=35 ?

С уважением.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение May 9 2007, 10:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(ps1x @ May 9 2007, 12:43) *
Допустим есть
0bXY000000.
Как сделать
0bYX000000?

xxx = ((xxx>>1)|(xxx<<1))&0xC0;
Цитата
И еще, есть ли в CVAVR функция, возвращающая № буквы, т.е. типа chr("a")=35 ?

Обалдеть sad.gif
1. "a" - это стринг, а 'буква' это 'a'
2. 'a' это и есть 'номер буквы'


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Serg76
сообщение May 9 2007, 12:23
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(zltigo @ May 9 2007, 13:22) *
xxx = ((xxx>>1)|(xxx<<1))&0xC0;

Обалдеть sad.gif
1. "a" - это стринг, а 'буква' это 'a'
2. 'a' это и есть 'номер буквы'

Как мне видится надо сделать так:

xxx = 0b XY00 0000; // условие
xxx = (xxx&0x33f) | ( ( (xxx&0x80)>>1) | ( (xxx&0x40)<<1) );

тогда остальные биты остануться в живых
Go to the top of the page
 
+Quote Post
ps1x
сообщение May 9 2007, 13:24
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Цитата(Serg76 @ May 9 2007, 15:23) *
Как мне видится надо сделать так:

xxx = 0b XY00 0000; // условие
xxx = (xxx&0x33f) | ( ( (xxx&0x80)>>1) | ( (xxx&0x40)<<1) );

тогда остальные биты остануться в живых


Я это сделал так:
xxx = (((xxx>>1)|(xxx<<1))&xxx&0xBF)^0b01000000;
Go to the top of the page
 
+Quote Post
Serg76
сообщение May 9 2007, 14:44
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(ps1x @ May 9 2007, 16:24) *
Я это сделал так:
xxx = (((xxx>>1)|(xxx<<1))&xxx&0xBF)^0b01000000;

Прошу прощения, но по-моему сильно мудрЕно и, как мне кажется, неверно. Смотрите:

при взаимных сдвижках - (xxx>>1)|(xxx<<1) без предварительного выделения нужных бит X и Y с помощью маскирования (xxx&0x80), (xxx&0x40) и последующего сложения ИЛИ непременно возникнет ошибка (Y | b = ????????). Попробуем проследить ход операций:
1. Сдвижка xxx на бит вправо даст 00 bXY0 0000;
2. Сдвижка xxx на бит влево даст bX Y000 0000;
3. После ИЛИ непонятно вообще что получится.

А далее я что-то тоже не понял: ...&xxx&0xBF)^0b01000000;

Если бы мы имели дело с регистром вида 00XY000000, то проканал бы и вариант zltigo, а так у нас имеется еще бит 'b', который как я понимаю может принимать любое значение. Поэтому мой вариант является универсальным, даже если на всех остальных позициях, кроме XY, будут биты с различными значениями.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение May 10 2007, 20:36
Сообщение #6


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Serg76 @ May 9 2007, 17:44) *
Прошу прощения, но по-моему сильно мудрЕно и, как мне кажется, неверно. Смотрите:

при взаимных сдвижках - (xxx>>1)|(xxx<<1) без предварительного выделения нужных бит X и Y с помощью маскирования (xxx&0x80), (xxx&0x40) и последующего сложения ИЛИ непременно возникнет ошибка (Y | b = ????????). Попробуем проследить ход операций:
1. Сдвижка xxx на бит вправо даст 00 bXY0 0000;
2. Сдвижка xxx на бит влево даст bX Y000 0000;
3. После ИЛИ непонятно вообще что получится.

А далее я что-то тоже не понял: ...&xxx&0xBF)^0b01000000;

Если бы мы имели дело с регистром вида 00XY000000, то проканал бы и вариант zltigo, а так у нас имеется еще бит 'b', который как я понимаю может принимать любое значение. Поэтому мой вариант является универсальным, даже если на всех остальных позициях, кроме XY, будут биты с различными значениями.

Комментарий в стиле клетчатого.
Что ни предложение, то шедевр!
Я плакалъ.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ps1x   Поменять местами биты в байте.   May 9 2007, 09:43
|- - ps1x   Цитата(zltigo @ May 9 2007, 13:22) xxx = ...   May 9 2007, 10:36
||- - zltigo   Цитата(ps1x @ May 9 2007, 13:36) да нет, ...   May 9 2007, 10:46
||- - haker_fox   Цитата(ps1x @ May 9 2007, 18:36) да нет, ...   May 9 2007, 11:47
||- - ps1x   Цитата(haker_fox @ May 9 2007, 14:47) А к...   May 9 2007, 12:16
||- - haker_fox   Цитата(ps1x @ May 9 2007, 21:16) У меня е...   May 11 2007, 02:41
|- - zltigo   Цитата(Serg76 @ May 9 2007, 17:44) ....то...   May 9 2007, 15:16
|- - Edmundo   Цитата(Serg76 @ May 9 2007, 18:44) 1. Сдв...   May 9 2007, 15:30
- - Laksus   Цитата(Serg76 @ May 9 2007, 14:23) Как мн...   May 9 2007, 15:00
- - xemul   Тупое решение в лоб Кодt = x; x &= 0x3f; if...   May 9 2007, 15:27
- - Visor   Есть такой флаг "Т", вот через него можн...   May 10 2007, 13:07
|- - kv_addr   Цитата(Visor @ May 10 2007, 16:07) Есть т...   May 11 2007, 00:34
|- - singlskv   Цитата(kv_addr @ May 11 2007, 04:34) На а...   May 11 2007, 15:27
|- - kv_addr   Цитата(singlskv @ May 11 2007, 18:27) Дли...   May 11 2007, 15:50
|- - singlskv   Цитата(kv_addr @ May 11 2007, 19:50) Пыта...   May 11 2007, 16:39
|- - kv_addr   Цитата(singlskv @ May 11 2007, 19:39) Дык...   May 11 2007, 20:13
|- - singlskv   Цитата(kv_addr @ May 12 2007, 00:13) IAR-...   May 11 2007, 21:05
|- - kv_addr   Цитата(singlskv @ May 11 2007, 23:20) А у...   May 11 2007, 21:07
|- - singlskv   Цитата(kv_addr @ May 12 2007, 01:07) Пров...   May 11 2007, 21:22
|- - kv_addr   Цитата(singlskv @ May 12 2007, 00:22) А в...   May 11 2007, 22:35
|- - Александр Куличок   Цитата(singlskv @ May 12 2007, 00:22) А в...   May 12 2007, 15:33
|- - singlskv   Цитата(Александр Куличок @ May 12 2007, 19...   May 12 2007, 21:12
- - Punk   Цитата(ps1x @ May 9 2007, 12:43) Допустим...   May 10 2007, 14:06
|- - Dog Pawlowa   Два порта контроллера закольцевать еще не предлага...   May 10 2007, 14:20
- - ae_   Цитата(ps1x @ May 9 2007, 18:43) Допустим...   May 11 2007, 02:04
|- - kv_addr   Цитата(ae_ @ May 11 2007, 05:04) асм, три...   May 11 2007, 14:47
- - defunct   ЦитатаВедь и переносимость программ, написанных на...   May 12 2007, 00:15
|- - kv_addr   Цитата(defunct @ May 12 2007, 03:15) Позв...   May 12 2007, 02:01
|- - defunct   Цитата(kv_addr @ May 12 2007, 04:01) Но 1...   May 12 2007, 02:42
|- - kv_addr   Цитата(defunct @ May 12 2007, 05:42) Прот...   May 12 2007, 04:01
|- - defunct   Цитата(kv_addr @ May 12 2007, 06:01) IMHO...   May 12 2007, 12:16
- - singlskv   Видимо самый быстрый вариант на С будет таким: Код...   May 12 2007, 12:05
- - sensor_ua   Цитатапрограммная реализация encoder'a/decoder...   May 12 2007, 15:09
|- - kv_addr   Цитата(sensor_ua @ May 12 2007, 18:09) Ду...   May 12 2007, 23:08
- - Александр Куличок   ЦитатаВсе правильно, в варианте с битом 7, компиля...   May 13 2007, 07:05


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 09:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01462 секунд с 7
ELECTRONIX ©2004-2016