Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Why so seriouS
44 / 44 / 1
Регистрация: 12.03.2013
Сообщений: 167
#1

циклические сдвиги - C++

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

Как организовать циклический сдвиг числа? Например у меня есть число 5. В двоичной системе это выглядит как 0101, и мне нужно сделать так чтобы старший бит переместился в младший, то есть, чтобы стало 1010. Как это реализовать с помощью операторов сдвига?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 22:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос циклические сдвиги (C++):

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

Циклические сдвиги массива - C++
#include <cstdio> #include <cctype> #include <iostream> #include <cmath> #include "QTime" using namespace std; void ccyv(int...

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

Сдвиги - C++
Необходимо сдвинуть массив беззнаковых целых чисел, как единое число. Обычные сдвиги и циклические ... Подскажите, пожалуйста :) ...

Сдвиги. (<< и >>) - C++
Всем привет, подскажите плз, насчёт сдвигов, а то я чилал в инете и что то ничего не понял. Вот например какой будет результат? int x =...

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

4
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.05.2013, 22:14 #2
Why so seriouS, старший бит всегда = 1, если вы имеете ввиду фиксированную длину, то говорите сколько всего разрядов.
0
daslex
1271 / 515 / 106
Регистрация: 02.08.2011
Сообщений: 2,706
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
Croessmah
Эксперт CЭксперт С++
13416 / 7570 / 855
Регистрация: 27.09.2012
Сообщений: 18,632
Записей в блоге: 3
Завершенные тесты: 1
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
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2013, 12:39
Привет! Вот еще темы с ответами:

Побитовые сдвиги - C++
нужна помощь с заданием на С++: При написании функций можно использовать только следующее: - целочисленные константы; - целочисленные...

Побитовые сдвиги - C++
#include&lt;iostream&gt; int main() { int t=1; while(255&amp;t){ t=t&lt;&lt;t; std::cout&lt;&lt;t&lt;&lt;'\n';} ...

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

Логические сдвиги - C++
Вводим число 'k', где k=2n. Должно вывести 'n'. Решить при помощи логических сдвигов.


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
10.05.2013, 12:39
Ответ Создать тему
Опции темы

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