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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> циклический сдвиг переменнойв 
:(
    Опции темы
semibug
Дата 20.7.2010, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Каким наиболее простым способом можно осуществить сдвиг значения 32-х битной переменной влево на один разряд с переносом старшего бита в младший (т.е. сдвиг по кольцу)?

PM   Вверх
azesmcar
Дата 20.7.2010, 16:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Код

unsigned int cyclic_shift(unsigned int x)
{
    return (x << 1) | (x >> (8 * sizeof(x) - 1));
}

?
PM   Вверх
semibug
Дата 20.7.2010, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



azesmcar, спасибо. Как считаете, компилятор сообразит что достаточно одной ассемблерной инструкции цикличного сдвига?

PM   Вверх
bsa
Дата 20.7.2010, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(semibug @  20.7.2010,  19:41 Найти цитируемый пост)
azesmcar, спасибо. Как считаете, компилятор сообразит что достаточно одной ассемблерной инструкции цикличного сдвига?

gcc 4.4 сообразил:
Код
        .file   "aa.cpp"
        .text
.globl _Z12cyclic_shiftj
        .type   _Z12cyclic_shiftj, @function
_Z12cyclic_shiftj:
.LFB0:
        .cfi_startproc
        .cfi_personality 0x3,__gxx_personality_v0
        pushq   %rbp
        .cfi_def_cfa_offset 16
        movq    %rsp, %rbp
        .cfi_offset 6, -16
        .cfi_def_cfa_register 6
        movl    %edi, -4(%rbp)
        movl    -4(%rbp), %eax
        rorl    $31, %eax
        leave
        ret
        .cfi_endproc
.LFE0:
        .size   _Z12cyclic_shiftj, .-_Z12cyclic_shiftj
        .ident  "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
        .section        .note.GNU-stack,"",@progbits

PM   Вверх
azesmcar
Дата 21.7.2010, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(semibug @  20.7.2010,  18:41 Найти цитируемый пост)
Как считаете, компилятор сообразит что достаточно одной ассемблерной инструкции цикличного сдвига?

это надо проверять на конкретном компиляторе.

PM   Вверх
borisbn
Дата 21.7.2010, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



MSVC 2008 в debug сделал всё по отдельным командам ( ессно ), а в release - тоже одна операция
Цитата

; 23   :     return ( x << 1 ) | ( x >> ( 8 * sizeof( x ) - 1 ) );

  00000    8b 44 24 04  mov  eax, DWORD PTR _x$[esp-4]
  00004    d1 c0   rol  eax, 1



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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