![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| NastYoNa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.2.2011 Репутация: нет Всего: нет |
using namespace std;
const int leng = 1000; void LRR (unsigned char *S, int p, unsigned char *F, int m, unsigned char *L, int k) { unsigned char u1 = S[p]&1, u2; int i, j; for (i = 0; i < k; i++) { u2 = (S[p]>>F[0])&1; // Сумма по мод. 2 элеметов при степенях с ненулевым коэф. из F for (j = 1; j < m; j++) u2^= (S[p]>>F[i])&1; /* 1 */ L[i/8]>>(i%8) = u1; // Запись в массив ЛРР L самый правый элемент ключа for (i = 0; i < 7; i++) { // Сдвигаем ряд S[p]>>i = S[p]>>(i+1); } /* 2 */ S[p]>>7 = u2; // Самому левому элементы присваиваем сумму по мод. 2 } } int main() { unsigned char *S = new unsigned char[leng]; unsigned char *F = new unsigned char[leng]; unsigned char *Lr = new unsigned char[leng]; srand(time(NULL)); int i; int N = 8; for (i = 0; i < N; i++) S[i] = rand()%(0x100+1); return 0; } Вопрос, собственно по функции LRR Но для наглядности приведу код. Программа не хочет компилироваться, выдает такую вот ошибку (см. ниже) к выделенным строчкам. Что это такое и как его исправить, подскажите пожалуйта!! ОШИБКА: IntelliSense: выражение должно быть допустимым для изменения левосторонним значением |
|||
|
||||
| baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
кнопочкой "Код" надо пользоваться
вот эти выражения не являются lvalue, т.е. им нельзя присваивать значения. видимо вместо S[p]>>7=u2 должно быть
? |
||||||
|
|||||||
| NastYoNa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.2.2011 Репутация: нет Всего: нет |
Спасибо за ответ, остается еще кое-что.
Может я чего-то не понимаю, но такой записью, вроде, S[p] |= u2 << 7; заменять нельзя, т. к. если изначально, допустим S[p]>>7 принимало зачение 1 , а мы хотим его на 0 заменить (т.е. u2 = 0), то S[p] |= u2 << 7; присвоит значение опять 1 , т.к. 1|0 = 1 !!! ( |
|||
|
||||
| baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
верно. если нужно установить i-й бит переменной A в значение B, то
можно написать функцию
использовать так:
Это сообщение отредактировал(а) baldina - 28.2.2011, 19:59 |
||||||
|
|||||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
в первом выражении ошибся. поправил
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |