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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
ХреновыйПрогер
0 / 0 / 0
Регистрация: 23.09.2010
Сообщений: 18
#1

Циклический сдвиг. - C++

23.10.2010, 18:18. Просмотров 1376. Ответов 14
Метки нет (Все метки)

Нужно написать вот такую прогу, где нужно сдвинуть число а на n бит влево.
Циклический сдвиг.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2010, 18:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Циклический сдвиг. (C++):

циклический сдвиг - C++
написать программу на СИ (обычном ,НЕ Си++), используя символьные массивы : Если число отрицательных элементов масива А чётно,то...

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

Циклический сдвиг - C++
Ребята, в чем может быть проблема? Надо организовать ф-цию циклического сдвига вправо. ТО бишь x->y, y->z, z->x. Что я делаю не так? ...

Циклический сдвиг числа - C++
Написать программу, которая предлагает пользователю ввести пятизначное число и циклически сдвигает его влево и выводит результат в консоль....

Циклический сдвиг числа - C++
Здравствуйте, нужна помощь с циклическим сдвигом, данно: Число: 44225 Нужно произвести циклический сдвиг, то есть поставить...

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

14
D@rkD@iver
111 / 111 / 3
Регистрация: 01.10.2008
Сообщений: 876
24.10.2010, 15:43 #2
ну а где сама задача то?
ну вот так сдвигается число a на n
a= a<<n;
0
ХреновыйПрогер
0 / 0 / 0
Регистрация: 23.09.2010
Сообщений: 18
24.10.2010, 15:46  [ТС] #3
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
#include <stdio.h>
#include <conio.h>
 
void main(void)
 
{
typedef unsigned short int Integer; //16 bit.
    Integer a, b, x;
    a=1;
 
for( ; ; )
{
printf("\na=");
    scanf_s("%d", &a);
    printf("a= %d\t0x%X\n",a, a);
    
    printf("b=");
    scanf_s("%d", &b);
    
 
x = (a << b)|(a >>((sizeof(Integer)*8)-b)); 
 
printf("X= %d\t0x%X\n", x, x);
 
}
printf("The end");
}
Программу я написал, теперь не знаю как перевести a и х в двоичный код.
0
neosha
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 12
07.04.2012, 14:30 #4
для вывода числа в двоичном коде можно просто написать дополнительную функцию
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
07.04.2012, 14:38 #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
27
28
29
30
31
32
33
34
35
#define PRINT_BINARY(x) printf("\
%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d ", \
(x)&(1<<31),\
(x)&(1<<30),\
(x)&(1<<29),\
(x)&(1<<28),\
(x)&(1<<27),\
(x)&(1<<26),\
(x)&(1<<25),\
(x)&(1<<24),\
(x)&(1<<23),\
(x)&(1<<22),\
(x)&(1<<21),\
(x)&(1<<20),\
(x)&(1<<19),\
(x)&(1<<18),\
(x)&(1<<17),\
(x)&(1<<16),\
(x)&(1<<15),\
(x)&(1<<14),\
(x)&(1<<13),\
(x)&(1<<12),\
(x)&(1<<11),\
(x)&(1<<10),\
(x)&(1<<9),\
(x)&(1<<8),\
(x)&(1<<7),\
(x)&(1<<6),\
(x)&(1<<5),\
(x)&(1<<4),\
(x)&(1<<3),\
(x)&(1<<2),\
(x)&(1<<1),\
(x)&(1<<0)\
)
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
07.04.2012, 14:39 #6
Цитата Сообщение от neosha Посмотреть сообщение
для вывода числа в двоичном коде можно просто написать дополнительную функцию
можно cout <<bin <<a <<dec <<endl;
0
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
07.04.2012, 14:43 #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
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
32
33
34
35
#define PRINT_BINARY(x) printf("\
%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d ", \
(x)&(1<<31),\
(x)&(1<<30),\
(x)&(1<<29),\
(x)&(1<<28),\
(x)&(1<<27),\
(x)&(1<<26),\
(x)&(1<<25),\
(x)&(1<<24),\
(x)&(1<<23),\
(x)&(1<<22),\
(x)&(1<<21),\
(x)&(1<<20),\
(x)&(1<<19),\
(x)&(1<<18),\
(x)&(1<<17),\
(x)&(1<<16),\
(x)&(1<<15),\
(x)&(1<<14),\
(x)&(1<<13),\
(x)&(1<<12),\
(x)&(1<<11),\
(x)&(1<<10),\
(x)&(1<<9),\
(x)&(1<<8),\
(x)&(1<<7),\
(x)&(1<<6),\
(x)&(1<<5),\
(x)&(1<<4),\
(x)&(1<<3),\
(x)&(1<<2),\
(x)&(1<<1),\
(x)&(1<<0)\
);
Это бред какой -то))

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
32
33
34
35
36
37
38
#include <stdio.h>
#include <conio.h>
 
void int2bin(Integer x);
 
void main(void)
 
{
typedef unsigned short int Integer; //16 bit.
    Integer a, b, x;
    a=1;
 
for( ; ; )
{
printf("\na=");
    scanf_s("%d", &a);
    printf("a= %d\t0x%X\n",a, a);
    
    printf("b=");
    scanf_s("%d", &b);
    
 
x = (a << b)|(a >>((sizeof(Integer)*8)-b)); 
 
printf("X= %d\t0x%X\n", x, x);
int2bin(int x);
}
printf("The end");
}
 
void int2bin(Integer x)
{
    for(unsigned int n=1<<15; n>=1; n=n>>1)
        if(x&n)
            printf("1 ");
        else
            printf("0 ");
}
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
07.04.2012, 14:51 #8
Дату первого поста никто не смотрел?
можно cout <<bin <<a <<dec <<endl;
Нельзя

Добавлено через 36 секунд
Если, конечно, bin не переменная
1
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
07.04.2012, 15:13 #9
Цитата Сообщение от Merovingian Посмотреть сообщение
Это бред какой -то))

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
32
33
34
35
36
37
38
#include <stdio.h>
#include <conio.h>
 
void int2bin(Integer x);
 
void main(void)
 
{
typedef unsigned short int Integer; //16 bit.
    Integer a, b, x;
    a=1;
 
for( ; ; )
{
printf("\na=");
    scanf_s("%d", &a);
    printf("a= %d\t0x%X\n",a, a);
    
    printf("b=");
    scanf_s("%d", &b);
    
 
x = (a << b)|(a >>((sizeof(Integer)*8)-b)); 
 
printf("X= %d\t0x%X\n", x, x);
int2bin(int x);
}
printf("The end");
}
 
void int2bin(Integer x)
{
    for(unsigned int n=1<<15; n>=1; n=n>>1)
        if(x&n)
            printf("1 ");
        else
            printf("0 ");
}
Это бред какой-то
0
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
07.04.2012, 16:09 #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Это бред какой-то
Говорю, запись у вас очень элегантная.

Написать функцию для вывода двоичной записи числа - логично, а сделать тоже самое через директиву #define это как минимум странно))

Это, знаете, почти чтоже самое что и массив заполнять вот так:

C
1
2
3
4
5
...
array[0] = 0;
array[1] = 1;
array[2] = 2;
// и так еще 100500 раз
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
07.04.2012, 16:18 #11
Цитата Сообщение от Merovingian Посмотреть сообщение
array[0] = 0;
array[1] = 1;
array[2] = 2;
Запись такая нехороша не только и не столько своим индусским кодом, сколько неуниверсальностью.
Мы не сможем больше никак использовать код"array[1] = 1;"
Мой же принт вполне пригоден для употребления на практике.
-инт мало где изменит свой размер и станет 16 бит или тем более 33 бита, он почти всегда 32 бита
-В связи с этим мой код можно считать универсальным
-мой код не требует отладки, или требует значительно меньшей, чем проверять корректность функции с циклами и делениями, к тому же функция работает только до 16 бит.
-мой код значительно быстрее - на порядки, как в работе, так и в разработке. Не очень долго нажать 32 раза Shift+Ins.
- Мой код действительно быстрый, а если пугает его размер - спрячь его в хедер файл.
2
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
07.04.2012, 16:56 #12
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Запись такая нехороша не только и не столько своим индусским кодом, сколько неуниверсальностью.
Мы не сможем больше никак использовать код"array[1] = 1;"
Мой же принт вполне пригоден для употребления на практике.
-инт мало где изменит свой размер и станет 16 бит или тем более 33 бита, он почти всегда 32 бита
-В связи с этим мой код можно считать универсальным
-мой код не требует отладки, или требует значительно меньшей, чем проверять корректность функции с циклами и делениями, к тому же функция работает только до 16 бит.
-мой код значительно быстрее - на порядки, как в работе, так и в разработке. Не очень долго нажать 32 раза Shift+Ins.
- Мой код действительно быстрый, а если пугает его размер - спрячь его в хедер файл.
Ну вы знаете, я имел ввиду "индусский" код)) Ну то, что ваш код выглядит странновато, то с этим тяжело спорить. Даже в умных книжках пишут функции, такие записи очень редко вижу.

int мало где изменит размер. Что значит почти всегда? есть случаи когда int не 32 бита?

По поводу того, что он быстро работает, не требует отладки и быстро написать его можно - согласен.

Дело в том, что написал я, что это бред ещ потому, что не работает ВАШ УНИВЕРСАЛЬНЫЙ КОД!

Добавлено через 8 минут
Нужно как то так делать

C
1
((x)&(1<<тут на сколько сдвигаем))?1:0
Тогда ваша конструкция заработает
2
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
07.04.2012, 17:01 #13
Цитата Сообщение от Merovingian Посмотреть сообщение
Нужно как то так делать
C
1
(x >> num) & 1
0
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
07.04.2012, 17:11 #14
Цитата Сообщение от soon Посмотреть сообщение
C
1
(x >> num) & 1
Ну все варианты работают, кроме варианта Kuzia domovenok.

Кстати он видимо перепутал.
C
1
(x)&&(1<<здесь на сколько сдвигаем)
Kuzia domovenok, вы, наверное, это хотели?
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
07.04.2012, 17:13 #15
Цитата Сообщение от Merovingian Посмотреть сообщение
Кстати он видимо перепутал.
C
1
(x)&&(1<<здесь на сколько сдвигаем)
Kuzia domovenok, вы, наверное, это хотели?
Не! Ни в коем случае! только побитово!
Цитата Сообщение от soon Посмотреть сообщение
C
1
(x >> num) & 1
Спасибо, понял.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2012, 17:13
Привет! Вот еще темы с ответами:

Циклический сдвиг вправо - C++
Нужно сделать цеклический сдвиг машинного слова на 1 байт влево, через union и через побитовые операции. Вот так я пишу побитовый сдвиг ...

Циклический сдвиг влево - C++
Помогите написать программу которая будет осуществлять циклический сдвиг влево введённого числа на N разрядов (например, при сдвиге числа...

Циклический сдвиг матрицы - C++
Есть динамическая матрица, и есть обычный сдвиг на N элементов на право. как сделать сдвиг по рисунку? #include &lt;stdlib.h&gt; #include...

Инвертирование и циклический сдвиг - C++
Задание: Если содержание принятого кода может быть представлено в виде 2 в степени n, то выполнить операцию инвертирования значимых бит с...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
07.04.2012, 17:13
Ответ Создать тему
Опции темы

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