逻辑:如何在C / C ++中打印伪随机位序列模式

时间:2017-05-19 09:14:00

标签: c++ c

真的,我想获得随机位序列模式,请告诉我逻辑如何获得序列模式。

我尝试使用下面的(示例)代码来获取像这样的随机位序列模式

public class TrueFalseConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {

        return ((bool)value == true) ? 1 : 0;

    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {

        return ((sbyte)value == 1) ? true : false;

    }
}

但我只得到恒定的价值,没有像这样的任何改变

2147483663, 1073741831, 536870915, 2415919105, 1207959552, 2751463424, 3523215360, 1761607680, 3028287488, 3661627392, 1830813696

请找到附件并建议我。我很感激。

1932117999, 1932117999, 1932117999, 1932117999, 1932117999, 1932117999, 1932117999, 1932117999, 1932117999, 1932117999

2 个答案:

答案 0 :(得分:0)

首先,为它创建特殊功能。 其次,在每次迭代时使用静态变量来保存进度。

#include <stdio.h>

unsigned long long random()
{
        static unsigned int x =12131222, y=898565;
        static unsigned int z=58964796, c=6543217;
        unsigned long long t, result;
        x = 14900243 * x+ 123456789;
        y ^= y << 21;
        y ^= y >> 17;
        y ^= y << 30;
        /* Do not set y=0! */
        t = 42945843 * z + c;
        c = t >> 32;
        z = t;
        return result=(unsigned int)(x>>32) + (unsigned int)y +z;
}
int main()
{
        unsigned int r;
        int i;
        for ( i = 0; i < 10; i++)
        {
                r = random(); //use the LFSR
                printf ("%u, ", r);
        }
        return 0;
}

或者将代码移到循环中:

#include <stdio.h>

int main()
{
        unsigned int x =12131222, y=898565;
        unsigned int z=58964796, c=6543217;
        unsigned long long t, result;

        unsigned int r;
        int i;
        for ( i = 0; i < 10; i++)
        {
                x = 14900243 * x+ 123456789;
                y ^= y << 21;
                y ^= y >> 17;
                y ^= y << 30;
                /* Do not set y=0! */
                t = 42945843 * z + c;
                c = t >> 32;
                z = t;
                result=(unsigned int)(x>>32) + (unsigned int)y +z;
                r = result; //use the LFSR
                printf ("%u, ", r);
        }
        return 0;
}

答案 1 :(得分:0)

通常,您不应编写自己的伪随机数代码。使用srand()进行种子设定,使用rand()进行计算,如下所示:C++ random float number generation 仍然有更优质的随机数选项,但这是一个起点。