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

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

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

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

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

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

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

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

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

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

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

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

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

битовые сдвиги - 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++
Вводим число 'k', где k=2n. Должно вывести 'n'. Решить при помощи логических сдвигов.

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

Регистры, сдвиги и массивы - C++
заранее прошу прощения, если вы не поймёте моё изложение вопроса. задача - есть битовый файл, который режется на равыные части по 2кб...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.05.2013, 22:14     циклические сдвиги #2
Why so seriouS, старший бит всегда = 1, если вы имеете ввиду фиксированную длину, то говорите сколько всего разрядов.
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,662
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();
 
}
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 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;
}
Tulosba
:)
Эксперт С++
4392 / 3235 / 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;
}
Yandex
Объявления
10.05.2013, 12:39     циклические сдвиги
Ответ Создать тему
Опции темы

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