Циклический сдвиг вправо средствами C++
От: emergenter Россия  
Дата: 27.05.04 06:06
Оценка:
Как можно сдвинуть вправо циклически биты не прибегая к командам ассемблера?
Re: Циклический сдвиг вправо средствами C++
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 27.05.04 06:08
Оценка:
Здравствуйте, emergenter, Вы писали:

E>Как можно сдвинуть вправо циклически биты не прибегая к командам ассемблера?


Операторы побитового сдвига: << и >>.
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re[2]: Циклический сдвиг вправо средствами C++
От: emergenter Россия  
Дата: 27.05.04 06:10
Оценка:
Так это ведь вроде логический сдвиг???? или я ошибаюсь?
Re[3]: Циклический сдвиг вправо средствами C++
От: Аноним  
Дата: 27.05.04 06:19
Оценка:
E>Так это ведь вроде логический сдвиг???? или я ошибаюсь?

А что такое логический сдвиг? Тру в фолсе сдвигать ?????
Re: Циклический сдвиг вправо средствами C++
От: Кирпа В.А. Украина  
Дата: 27.05.04 06:20
Оценка: +2
Здравствуйте, emergenter, Вы писали:

E>Как можно сдвинуть вправо циклически биты не прибегая к командам ассемблера?

ИМХО Все таки эффективней будет сделать асемблерную вставку
__asm { }
!0xDEAD
Re[3]: Циклический сдвиг вправо средствами C++
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 27.05.04 06:32
Оценка:
Здравствуйте, emergenter, Вы писали:

E>Так это ведь вроде логический сдвиг???? или я ошибаюсь?


Это побитовый сдвиг.
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re[2]: Циклический сдвиг вправо средствами C++
От: jazzer Россия Skype: enerjazzer
Дата: 27.05.04 06:39
Оценка: 1 (1)
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Здравствуйте, emergenter, Вы писали:


E>>Как можно сдвинуть вправо циклически биты не прибегая к командам ассемблера?


SDB>Операторы побитового сдвига: << и >>.


только оно не циклическое, придется еще код сверху писать
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: Циклический сдвиг вправо средствами C++
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 27.05.04 07:12
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, SchweinDeBurg, Вы писали:


SDB>>Здравствуйте, emergenter, Вы писали:


E>>>Как можно сдвинуть вправо циклически биты не прибегая к командам ассемблера?


SDB>>Операторы побитового сдвига: << и >>.


J>только оно не циклическое, придется еще код сверху писать


Ну, это я понимаю. Думаю, что оператор for emergenter'у знаком.
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re: Циклический сдвиг вправо средствами C++
От: dyattle  
Дата: 27.05.04 07:41
Оценка:
Здравствуйте, emergenter, Вы писали:

E>Как можно сдвинуть вправо циклически биты не прибегая к командам ассемблера?

По идее следующий код должен работать:

Циклический сдвиг вправо на N бит (x и y по 32 бита) :
y = (x>>N)|(x<<(32-N))
Re[4]: Циклический сдвиг вправо средствами C++
От: Аноним  
Дата: 27.05.04 07:45
Оценка: 1 (1)
SDB>Ну, это я понимаю. Думаю, что оператор for emergenter'у знаком.

for это не оператор, а стэйтмент.
Re[5]: Циклический сдвиг вправо средствами C++
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 27.05.04 07:55
Оценка:
Здравствуйте, Аноним, Вы писали:

SDB>>Ну, это я понимаю. Думаю, что оператор for emergenter'у знаком.


А>for это не оператор, а стэйтмент.


statement
1) утверждение; высказывание; формулировка
2) оператор; предложение
3) предписание (КОБОЛ)
4) постановка (задачи)


Давайте не будем придираться к словам.
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re[5]: Циклический сдвиг вправо средствами C++
От: Аноним  
Дата: 27.05.04 08:00
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

SDB>>Ну, это я понимаю. Думаю, что оператор for emergenter'у знаком.


А>for это не оператор, а стэйтмент.


Причем здесь не нужный.
Re[6]: Циклический сдвиг вправо средствами C++
От: Аноним  
Дата: 27.05.04 08:03
Оценка:
SDB>

SDB>statement
SDB> 1) утверждение; высказывание; формулировка
SDB> 2) оператор; предложение
SDB> 3) предписание (КОБОЛ)
SDB> 4) постановка (задачи)



Отлично. Только мы говорим о С++, а не о возможных значениях этого слова. И на Вашем месте я бы спрятал скобки со словом КОБОЛ, несолидно как-то
Re[6]: Циклический сдвиг вправо средствами C++
От: Аноним  
Дата: 27.05.04 08:09
Оценка:
А>Причем здесь не нужный.

Ну, наверное, при виде слова 'циклический' непроизвольно хочется добавить цикл (или пару)
Re[2]: Циклический сдвиг вправо средствами C++
От: Аноним  
Дата: 27.05.04 08:28
Оценка:
D>Циклический сдвиг вправо на N бит (x и y по 32 бита) :
D>
D>y = (x>>N)|(x<<(32-N))
D>

При использовании этого кода важно помнить что сдвиг вправо для занковых и беззаноквых типов работает по разному. Пример выше для signed int для отрицательных значений цикличности обеспечивать не будет.
Re: Циклический сдвиг вправо средствами C++
От: WolfHound  
Дата: 27.05.04 09:08
Оценка: +1
Здравствуйте, emergenter, Вы писали:

E>Как можно сдвинуть вправо циклически биты не прибегая к командам ассемблера?

template<class T>
struct bits_of
{
    enum{value=sizeof(T)*CHAR_BIT};
};
template<class T>
T ror(T val, unsigned int n)
{
    enum{bits=bits_of<T>::value};
    n=n%bits;
    return (val>>n)|(val<<(bits-n));
}
int main()
{
    unsigned int i=0x12345678;
    i=GetTickCount();
    i=ror(i, 2);
    i=ror(i, 2);
    return i;
}

_main    PROC NEAR

; 96   :     unsigned int i=0x12345678;
; 97   :     i=GetTickCount();

    call    DWORD PTR __imp__GetTickCount@0

; 98   :     i=ror(i, 2);

    mov    ecx, eax
    shr    eax, 2
    shl    ecx, 30                    ; 0000001eH
    or    ecx, eax

; 99   :     i=ror(i, 2);

    mov    eax, ecx
    shr    eax, 2
    shl    ecx, 30                    ; 0000001eH
    or    eax, ecx

; 100  :     return i;
; 101  : }

    ret    0
_main    ENDP
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: Циклический сдвиг вправо средствами C++
От: Plague Россия 177230800
Дата: 27.05.04 10:32
Оценка:
Здравствуйте, dyattle, Вы писали:

D>Здравствуйте, emergenter, Вы писали:


E>>Как можно сдвинуть вправо циклически биты не прибегая к командам ассемблера?

D>По идее следующий код должен работать:

D>Циклический сдвиг вправо на N бит (x и y по 32 бита) :

D>
D>y = (x>>N)|(x<<(32-N))
D>


typedef<class T, class U>
inline T ror(U x, unsigned shift)
{
    return ((T)x>>shift)+((T)x<<(sizeof(T)*BITCOUNT));
}
... << RSDN@Home 1.1.3 stable >>
Re: Циклический сдвиг вправо средствами C++
От: folk Россия  
Дата: 27.05.04 10:48
Оценка: 1 (1) +2
Здравствуйте, emergenter, Вы писали:

E>Как можно сдвинуть вправо циклически биты не прибегая к командам ассемблера?


_rotr, _lrotr, _rotr64
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.