| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Бинарные опирации в С++ |
| Автор: NastYoNa 28.2.2011, 18:46 |
| 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 28.2.2011, 18:52 | ||||||
кнопочкой "Код" надо пользоваться
вот эти выражения не являются lvalue, т.е. им нельзя присваивать значения. видимо вместо S[p]>>7=u2 должно быть
? |
| Автор: NastYoNa 28.2.2011, 19:28 | ||
Спасибо за ответ, остается еще кое-что.
Может я чего-то не понимаю, но такой записью, вроде, S[p] |= u2 << 7; заменять нельзя, т. к. если изначально, допустим S[p]>>7 принимало зачение 1 , а мы хотим его на 0 заменить (т.е. u2 = 0), то S[p] |= u2 << 7; присвоит значение опять 1 , т.к. 1|0 = 1 !!! ( |
| Автор: baldina 28.2.2011, 19:41 | ||||||
верно. если нужно установить i-й бит переменной A в значение B, то
можно написать функцию
использовать так:
|
| Автор: baldina 28.2.2011, 19:59 |
| в первом выражении ошибся. поправил |