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

побитовые операции, не могу разобраться - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Y=tg(5x/3)+ln|2x+5|+1,8 http://www.cyberforum.ru/cpp-beginners/thread806196.html
помогите написать программу ддя вычисления! Y=tg(5x/3)+ln|2x+5|+1,8
C++ Может ли третий проверка возвращаемого функцией значения влиять на результат линковки? Не торопитесь с ответом. Я тоже так думал. Кропаем dll: //dllka.cpp #include <unknwn.h> void f(){ //Размер взят от балды char x ; http://www.cyberforum.ru/cpp-beginners/thread806188.html
Доступ к методам, массив указателей C++
Можно ли как нибудь получить доступ к методу Positive в данном случае: StrL ** testStr3; testStr3= new StrL * ; testStr = new StrLBit("000110101"); bool tmp = testStr->Positive(); если StrL - предок, StrLBit - потомок, Positive - метод класса StrLBit ? При таком коде компилятор не видит метод.
C++ Краткое и индексное хранение списков
на входе задано последовательность целых положительных чисел, не более 99, заканчивающуюся нулем. Организовать последовательно-связанное индексное хранение последовательности так, чтобы числа, имеют одинаковые первые цифры, были в одном подсписков.
C++ выделение памяти http://www.cyberforum.ru/cpp-beginners/thread806158.html
доброго времени суток)возник вопрос по поводу выделения памяти) если стоит тип int, то все работает норм, а если float то ошибку выдает)в чем косяк подскажите пожалуйста) #include<iostream> using namespace std; int main(){ float str, col; //float **ptrarr;
C++ Алгоритм RC5 Приветствую! Очередная лаба по криптографии вызвала определенные сложности. По заданию нужно реализовать приложение, которое: "1)С помощью EKE на основе RSA проверяет подлинность двух пользователей А и В и генерирует общий для них сеансовый ключ К 2)Используя полученный сеансовый ключ К и алгоритм шифрования RC5 производить шифровку и расшифровку сообщений между пользователями А и В. ... подробнее

Показать сообщение отдельно
case
7 / 7 / 2
Регистрация: 29.09.2010
Сообщений: 32
12.03.2013, 02:17     побитовые операции, не могу разобраться
Есть такой псевдокод


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
var int[0..623] MT // состояние генератора (тип данных int должен быть 32-битным, беззнаковому)
var int index = 0
/ / Начальная инициализация - заполнение массива состояния генератора
function initialiseGenerator ( int seed ) {
MT[0] := seed
for i from 1 to 623 {
MT[i] := 1812433253 * (MT[i-1] bitwise_xor right_shift_by_30_bits(MT[i-1])) + i
}
}
/ / Выбрать очередное ПВЧ - целое, 32 битное, беззнаковое, в интервале [0, 2 ^ 32)
function extractNumber() {
if index >= 624 {
generateNumbers()
index = 0
}
int y := MT[index]
y := y bitwise_xor (right_shift_by_11_bits(y))
y := y bitwise_xor (left_shift_by_7_bits(y) bitwise_and (2636928640))
y := y bitwise_xor (left_shift_by_15_bits(y) bitwise_and (4022730752))
y := y bitwise_xor (right_shift_by_18_bits(y))
index = index + 1
return y
}
/ / Изменить положение - возмущения массива MT - генерация следующих 624 чисел
function generateNumbers() {
for i from 0 to 623 {
int y := 32nd_bit_of(MT[i]) + last_31bits_of(MT[(i+1)%624])
if y even {
MT[i] := MT[(i+397)%624] bitwise_xor (right_shift_by_1_bit(y))
} else { // if y odd
MT[i] := MT[(i+397)%624] bitwise_xor (right_shift_by_1_bit(y)) bitwise_xor 2567483615
}
}
}
здесь last_XXbits_of – младшие XX битов числа, bitwise_xor – побитно умножения по модулю 2, right_shift_by_XX_bits –
побитно сдвиг вправо на XX битов, left_shift_by_XX_bits – побитно сдвиг влево на XX битов, 32nd_bit_of – 32 и бит (старший, бит остается на своей 32 и позиции), even – признак четности (младший бит = 0), odd – признак нечетности (младший бит = 1).



Нужно написать на С + +. Не Могу понять как реализовать

int y := 32nd_bit_of(MT[i]) + last_31bits_of(MT[(i+1)%624])


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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#define n 624
 
using namespace std;
 
 
 
int MT[n];
int seed=4727;
int index=0;
 
void initialiseGenerator()
{
    MT[0]=seed;
    for(int i=1; i<n; i++)
            MT[i] = 1812433253 *(MT[i-1]^MT[i-1]>>30) + i;
}
 
 
int extractNumber() 
    {
    if (index >= n) 
        {
            generateNumbers();
            index = 0;
        }
    int y = MT[index];
    y = y ^ (y>>11);
    y = y ^ (y<<7&2636928640);
    y = y ^ (y<<15&4022730752);
    y = y ^ (y>>18);
    index++;
    return y;
    }
// Изменить положение - возмущения массива MT - генерация следующих 624 чисел
 
void generateNumbers() 
    {
    for(int i = 0; i < n; i++)  
        {
//вот тут не могу понять как это реализовать
        int y = 32nd_bit_of(MT[i]) + last_31bits_of(MT[(i+1)%n]);
//
        if ((y&1)==0) 
            {
            MT[i] = MT[(i+397)%n]^(y>>1);
            } 
            else 
            { // if y odd
                MT[i] = MT[(i+397)%n]^(y>>1)^2567483615;
            }
        }
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru