Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
45 / 45 / 12
Регистрация: 12.03.2013
Сообщений: 167
1

циклические сдвиги

09.05.2013, 22:02. Просмотров 1873. Ответов 4
Метки нет (Все метки)

Как организовать циклический сдвиг числа? Например у меня есть число 5. В двоичной системе это выглядит как 0101, и мне нужно сделать так чтобы старший бит переместился в младший, то есть, чтобы стало 1010. Как это реализовать с помощью операторов сдвига?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2013, 22:02
Ответы с готовыми решениями:

Циклические сдвиги
доброго времени суток, уважаемые форумчане. напишите пожалуйста код к задаче, от этого зависит...

Циклические сдвиги массива
#include <cstdio> #include <cctype> #include <iostream> #include <cmath> #include "QTime"...

Выполнить все циклические сдвиги слов в заданном тексте влево
Задана в файле строка текста. Выполнить все циклические сдвиги слов в заданном тексте влево. Каждый...

Сдвиги (С++)
Создать функцию, которая позволяет в заданном диапазоне натуральных чисел найти и выдать на экран...

4
667 / 195 / 29
Регистрация: 10.05.2012
Сообщений: 595
09.05.2013, 22:14 2
Why so seriouS, старший бит всегда = 1, если вы имеете ввиду фиксированную длину, то говорите сколько всего разрядов.
0
1362 / 586 / 198
Регистрация: 02.08.2011
Сообщений: 2,880
09.05.2013, 23:35 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <bitset> 
 
 
int main()
{
    int x=5;
    x=x<<1;
 std::cout<<x<<"\t";
 std::cout << std::bitset<sizeof(x) * 8>(x) << std::endl; 
 std::cin.get();
 
}
2
Don't worry, be happy
16917 / 9794 / 1886
Регистрация: 27.09.2012
Сообщений: 24,279
Записей в блоге: 2
10.05.2013, 03:38 4
Цитата Сообщение от Why so seriouS Посмотреть сообщение
Как это реализовать с помощью операторов сдвига?
Значение старшего бита в переменную. Затем сдвиг всего числа влево и потом Number & <старший_бит>

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <climits>
typedef unsigned short int USINT;
 
USINT RCyrShift(USINT number){
    int bits;
    for(bits=sizeof(number)*CHAR_BIT-1;bits>=0;--bits){
        if(number&(1<<bits))
            break;
    }
    if (bits<=0) return number;
    return (number>>1)|((number&1)<<bits);
}
USINT LCyrShift(USINT number){
    int bits;
    for(bits=sizeof(number)*CHAR_BIT-1;bits>=0;--bits){
        if(number&(1<<bits))
            break;
    }
    if (bits<=0) return number;
    USINT mask=number&(1<<bits);
    return ((number & ~mask)<<1)|(mask>>bits);
}
 
int main(){
    USINT number;
    std::cout<<"Number ->";
    std::cin>>number;
    std::cout<<"Left: "<<LCyrShift(number)<<std::endl;
    std::cout<<"Right: "<<RCyrShift(number)<<std::endl;
}
2
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.05.2013, 12:39 5
Можно с вектором извратиться:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <algorithm>
#include <vector>
 
int main()
{
    const int bitlen = 4;
    const int value = 5;
    
    std::vector<bool> v;
 
    for( int i=0; i<bitlen; ++i )
    {
        v.push_back( value << i & 1 << bitlen-1 );
    }
 
    std::rotate( v.begin(), v.begin()+1, v.end() );
 
    for( auto bit : v )
    {
        std::cout << bit;
    }
 
    std::system( "pause" );
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2013, 12:39

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

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

Сдвиги. (<< и >>)
Всем привет, подскажите плз, насчёт сдвигов, а то я чилал в инете и что то ничего не понял. Вот...

битовые сдвиги
как с помощью битовых сдвигов передвинуть разряды в шестнадцатеричном числе?

Побитовые сдвиги
Был на собеседовании, была задачка, вроде такая: Есть функция, которая принимает char a (1 байт)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.