Циклический сдвиг c: c++ — Реализовать циклический сдвиг вправо на K разрядов

Содержание

циклический сдвиг c — CodeRoad

Я должен сдвинуть int на одно место вправо и вернуть его

В Java я могу просто вернуть n >> 1;

Возможно ли это в C?

Метод, который нам был дан, заключается в следующем

// Return n after a right circular 1-bit shift
unsigned int right_circular_shift_1(unsigned int n) {

c

bit-shift

Поделиться

Источник


simion    

31 мая 2010 в 11:44

2 ответа


  • Не-циклический сдвиг в Matlab?

    Matlab имеет circshift , который сдвигает матрицу по кругу, то есть смещает смещенные элементы в противоположную сторону. Есть ли функция, которая сдвигает матрицу с копированием последних значений или заполнением нового пространства нулями? Как это делает побитовый сдвиг в C/C++? UPDATE Я знаю,…

  • Правильный арифметический (циклический) сдвиг в verilog

    Я новичок в verilog и застрял на одном любопытном моменте. Я пытаюсь сделать циклическое мигание светодиодов(зеленые огни слева направо и красные справа налево). У меня есть 12 светодиодов, и я синхронизирую свою программу с clock(CLK) . Я хотел использовать для этого арифметический сдвиг , но по…



10

C не имеет кругового сдвига, поэтому я предполагаю, что упражнение состоит в том, чтобы реализовать его. Способ сделать это для кругового сдвига влево заключается в следующем:

- get the current leftmost bit  and save it
- shift the number leftwards by one
- or the saved bit in at the rightmost bit position

Для правого кругового сдвига:

- get the current rightmost bit  and save it
- shift the number rightwards by one
- or the saved bit in at the leftmost bit position

Поделиться


Unknown    

31 мая 2010 в 11:47



5

Разве вы не пробовали?

n >> 1

Это будет работать в C (и других языках на основе C) так же, как и в Java (хотя и не циклически).

Поделиться


Johnsyweb    

31 мая 2010 в 11:47


Похожие вопросы:

круговой сдвиг в c

Я ищу алгоритм, который реализует круговой сдвиг влево от битового двоичного числа (на языке c). Алгоритм будет действовать так: > > правый слот будет заполнен не нулями, а числами, перемещенными…

Сдвиг вправо «> > » в C99

Возможный Дубликат : Странное поведение оператора правого сдвига Привет Почему оба числа из этой функции печатаются одинаково? Это не циклический сдвиг. unsigned int i=0x89878685; int main() {…

Напишите циклический файл в c++

Мне нужно написать циклический файл в c++. Программа должна записать строки в файл, и когда код достигает максимального количества строк, он должен перезаписать строки в начале файла. У кого-нибудь…

Не-циклический сдвиг в Matlab?

Matlab имеет circshift , который сдвигает матрицу по кругу, то есть смещает смещенные элементы в противоположную сторону. Есть ли функция, которая сдвигает матрицу с копированием последних значений…

Правильный арифметический (циклический) сдвиг в verilog

Я новичок в verilog и застрял на одном любопытном моменте. Я пытаюсь сделать циклическое мигание светодиодов(зеленые огни слева направо и красные справа налево). У меня есть 12 светодиодов, и я…

Циклический сдвиг ряда a pandas

Я использую метод сдвига для ряда данных в pandas (документация) . Возможно ли сделать циклический сдвиг, то есть первое значение становится последним значением, за один шаг? >>> input…

Правый Циклический Сдвиг C#

Как я могу сделать правильный круговой сдвиг в C#? Я использую эту функцию для выполнения кругового сдвига влево. Моя функция работает следующим образом: 1100 — > сдвиг на 1 => 1001 1100 — > сдвиг…

Циклический сдвиг 28 бит 4 байта в C

У меня есть unsigned char *Buffer , который содержит 4 байта, но только 28 из них имеют отношение ко мне. Я ищу, чтобы создать функцию, которая будет делать круговой сдвиг 28 бит, игнорируя…

найти циклический сдвиг данной строки

Я должен сделать циклический сдвиг струны. Например, если у меня есть строка hihi Я должен найти циклический сдвиг hihi is 0th shift of hihi ihih is 1st shift of hihi hihi is 2nd ihih is 3rd В этом…

Битный циклический сдвиг

В настоящее время я изучаю битовые операции, и мне поручено сделать поворот влево 4-битного целого числа. Мой код для 4-битного левого поворота таков private static int BITS_IN_INTEGER = 4; private…

Циклический сдвиг в одномерном массиве


Rating: 4.5/5. From 4 votes.

ПараметрТип Значение
InputPattern

Для ROL: BOOL, BYTE, WORD, DWORD

Для ROL_INT: INT

Для ROL_DINT: DINT

это битовая комбинация, которая будет сдвинута
Number

Для ROL: UINT

Для ROL_INT, ROL_DINT: INT

это число позиций, на которые будет сдвинута последовательность

ПараметрТип данныхЗначение
OutputPattern

Для ROL: BOOL, BYTE, WORD, DWORD

Для ROL_INT: INT

Для ROL_DINT: DINT

это сдвинутая последовательность

def Счетчик (N, счет, поворот):

N = шестигранник ( внутренний (N)). Раздельный ( 'x' ) [ - 1 ]

S = ( бин ( внутри (N, 16 )) [ 2 :]).zfill ( 16 )

if (поворот = = 'R' ):

S = (S [ 16 - int (количество):] + S [ 0 : 16 - int (количество)])

еще :

S = (S [ int (количество):] + S [ 0 : внутренний (количество)])

печать ( int (S, 2 ))

N = 7881

количество = 5

оборот = 'L'

Счетчик (N, счет, поворот)

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189

#include h>

с использованием пространства имен std;

const int N = 1234567;

char foo [42] [N];
int z [N];
знаков [N];

void build_z (int n) {
int l = 0, r = 0;
z [0] = n;
для (int i = 1; i z [i] = (i> r? 0: min (r — i + 1, z [i — l]));
в то время как (i + z [i] z [i] ++;
}
, если (i + z [i] — 1> r) {
l = i;
r = i + z [i] — 1;
}
}
}

вектор <пара > ребра [N];
вектор g [N], gr [N];

void add (int x, int y, int z) {
// cerr << "add" << x << "" << y << "" << z << endl;
ребер [x].push_back (make_pair (y, z));
}

bool было [N];
int w [N], кВт;

void dfs1 (int v) {
было [v] = true;
для (int j = 0; j <(int) g [v] .size (); j ++) {
int u = g [v] [j];
, если (! Было [u]) {
dfs1 (u);
}
}
Вт [кВт ++] = v;
}

int c [N];
int of_c [N];

void dfs2 (int v) {
для (int j = 0; j <(int) gr [v] .size (); j ++) {
int u = gr [v] [j];
если (c [u] == -1) {
c [u] = c [v];
of_c [c [u]] ++;
dfs2 (u);
}
}
}

петля bool [N];
int начало [N], конец [N];
int flen [N];
int vers;

bool test (int from, int to) {
if (from> to) {
return true;
}
для (int i = 0; i g [i].Чисто();
gr [i] .clear ();
}
for (int i = 0; i было [i] = true;
loop [i] = false;
}
было [0] = ложь;
для (int j = 0; j <(int) edge [0] .size (); j ++) {
g [0] .push_back (edge ​​[0] [j] .first);
gr [края [0] [j] .first] .push_back (0);
}
для (int id = from; id <= to; id ++) {
for (int i = start [id]; i было [i] = false;
для (int j = 0; j <(int) edge [i].размер(); j ++) {
int helper = Edge [i] [j] .second;
if (helper to) {
continue;
}
if (i == edge [i] [j] .first) {
loop [i] = true;
}
g [i] .push_back (edge ​​[i] [j] .first);
gr [края [i] [j] .first] .push_back (i);
}
}
}
кВт = 0;
for (int i = 0; i if (was [i]) {
continue;
}
dfs1 (i);
}
для (int i = 0; i c [i] = -1;
}
int nc = 0;
для (int id = kw — 1; id> = 0; id—) {
int i = w [id];
если (c [i] == -1) {
of_c [nc] = 1;
c [i] = nc ++;
dfs2 (i);
}
}
for (int id = from; id <= to; id ++) {
for (int i = start [id] + 1; i if (of_c [c [ i]]> 1 || loop [i]) {
return false;
}
}
}
возврат true;
}

int main () {
int cnt;
scanf («% d», & cnt);
верс = 1;
для (int i = 0; i scanf («% s», foo [i]);
flen [i] = strlen (foo [i]);
start [i] = vers;
vers + = flen [i];
finish [i] = vers;
добавить (0, начало [i], -1);
}
для (int i = 0; i int n = 0;
для (int j = 0; j s [n ++] = foo [i] [j];
}
s [n ++] = ‘#’;
int from = n;
для (int q = 0; q n = from;
для (int j = 0; j s [n ++] = foo [q] [j];
}
build_z (n);
для (int j = 0; j int x = flen [i];
int y = flen [q] — j;
if (z [from + j]! = Min (x, y)) {
continue;
}
// cerr << "привет!" << i << "" << q << "" << j << "" << x << "" << y << "" << z [from + j] << endl;
if (x == y) {
add (start [q] + j, 0, i);
} else {
if (x add (start [q] + j, start [q] + j + x, i);
} else {
add (start [q] + j, start [i] + y, i);
}
}
}
}
}
int j = -1;
int ans = 0;
for (int i = 0; i while (j + 1 if (! Test (i, j + 1)) {
break;
}
j ++;
}
if (i <= j) {
ans + = j — i + 1;
}
// cerr << i << "->» << j << endl;
}
printf («% d \ n», ans);
возврат 0;
}

2


Модуляция QPSK / OFDM

Размер DFT 256
Количество поднесущих данных2 64
Количество символов для усреднения 1, 2, 4, 8 символов
Циклический сдвиг () От 60 до 124
Разрешение циклического сдвига () 4
Схема кодирования Сверточное кодирование
Перемежитель Матрица: 16 × 8
Схема декодирования Мягкое решение Витерби
Длина ограничения 7
Скорость кодирования 1
Генератор полиномов 171 13 3
Количество ответвлений 3
Канал Равномерный (6 путей)
Усилитель мощности с коэффициентом изгиба () 3
Отсрочка входного сигнала (IBO) 0, 2 , 4 дБ