Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перестановка бит в двоичном числе 
:(
    Опции темы
mes
Дата 10.4.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



вот альтернативный похожий вариант 
Код

byte func (byte source)
{
return         ((source & 128)>> 7)
            |  ((source & 64) >> 5)
            |  ((source & 32) >> 3)
            |  ((source & 16) >> 1)
            |  ((source & 8)  << 1)
            |  ((source & 4)  << 3)
            |  ((source & 2)  << 5)
            |  ((source & 1)  << 7);
}



--------------------
PM MAIL WWW   Вверх
DmbITpo
Дата 10.4.2008, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.4.2008

Репутация: нет
Всего: нет



mes, исправил ошибку. 

Вопросик ко всем ещё один. Мне на самом деле надо вот что : 

Дан текст, надо  в каждой его букве таким вот образом переставить биты. Следовательно получиться другой символ. Типа закодировать надо текст таким образом. 

В связи с этим вопрос - буквы латинского алфавита столько бит имеют? больше 8-и каждая? 

Это сообщение отредактировал(а) DmbITpo - 10.4.2008, 22:32
PM MAIL   Вверх
korian
Дата 10.4.2008, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 3
Всего: 17



буква алфавита имеет стока бит, скока ей назначат  smile 
а на компах x86, char - 8 бит, wchar_t - 16 бит.

PM   Вверх
mes
Дата 10.4.2008, 22:54 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(DmbITpo @  10.4.2008,  22:30 Найти цитируемый пост)
В связи с этим вопрос - буквы латинского алфавита столько бит имеют? больше 8-и каждая? 

английских букв < 32 а значит для хранения достаточно 5 бит

Цитата(korian @  10.4.2008,  22:40 Найти цитируемый пост)
буква алфавита имеет стока бит, скока ей назначат   
а на компах x86, char - 8 бит, wchar_t - 16 бит.

"первые" 7 бит любой кодировки одинаковы и включают в себя спец символы и буквы английского языка..
для остальных ("национальных") символов зависит от кодировки (для не "стандартных" кодировок может быть как угодно)

Цитата(DmbITpo @  10.4.2008,  22:30 Найти цитируемый пост)
 в каждой его букве таким вот образом переставить биты. Следовательно получиться другой символ

в таком случае буква может превратиться в спецсимвол ( например в '\0' - конец строки) - со всеми вытекающими последствиями





Это сообщение отредактировал(а) mes - 10.4.2008, 22:57


--------------------
PM MAIL WWW   Вверх
DmbITpo
Дата 10.4.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.4.2008

Репутация: нет
Всего: нет



В общем исспользую я вот такой код: 

Код

unsigned rev(unsigned x) {
    x = (x & 0x55555555) << 1 | (x >> 1) & 0x55555555;
    x = (x & 0x33333333) << 2 | (x >> 2) & 0x33333333;
    x = (x & 0x0F0F0F0F) << 4 | (x >> 4) & 0x0F0F0F0F;
    x = (x << 24) | ((x & 0xFF00) << 8) | ((x >> 8) & 0xFF00) | (x >> 24);
    return x;

}


При кодировке всё нормально работает. Единственное что, например при перевороте числа 1010011, оно выдаёт 110010100000000000000 (за кол-во нулей не ручаюсь, но много лишних). Как бы мне эти хвосты подчистить? 

А то мне кажеться из-за этого при "раскодировке" (т.е. применения того же самого кода для зашифрованной строки), получается не первоначальная строка, а какой-то бред и ужас....

Это сообщение отредактировал(а) DmbITpo - 10.4.2008, 23:22
PM MAIL   Вверх
blinded
Дата 10.4.2008, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 16.2.2008

Репутация: нет
Всего: нет



Цитата(MAKCim @ 10.4.2008,  21:48)
Цитата(blinded @  10.4.2008,  21:31 Найти цитируемый пост)
Все прсто замечательно. Вот только со знаковыми типами результат сдвига влево implementation defined 

это еще почему?

Извиняюсь, описался вправо конечно.... Но сути это не меняет. В приведенных выше примерах со сдвигом тип должен быть беззнаковым
PM MAIL   Вверх
mes
Дата 10.4.2008, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(DmbITpo @  10.4.2008,  23:13 Найти цитируемый пост)
 выдаёт 110010100000000000000 

так она с 32 мя битами оперирует..
чтоб обрезать результат до 8 бит  : x >> (32-8) & 255



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.