码迷,mamicode.com
首页 > Windows程序 > 详细

C# 生成小于Int数值绝对值的随机数

时间:2018-08-23 15:30:34      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:operation   ret   short   dom   buffer   create   abs   数值   i++   

C#中有两种类型的随机数生成器:

  • 伪随机数(System.Random)
  • 安全随机数(System.Security.Cryptography.RNGCryptoServiceProvider)

   关键的区别在于用于进行随机化的种子值可能不会快速且随机地变化。例如,System.Random依赖于计算机系统时钟

 

  public static class IntNumRandom
    {

        /// <summary>   
        /// 生成小于输入值绝对值的随机数   
        /// </summary>   
        /// <param name="NumSides"></param>   
        /// <returns></returns>   
        public static int Next(this int numSeeds)
        {
            numSeeds = Math.Abs(numSeeds);
            if (numSeeds <= 1)
            {
                return 0;
            }

            int length = 4;
            if (numSeeds <= byte.MaxValue)
            {
                length = 1;
            }
            else if (numSeeds <= short.MaxValue)
            {
                length = 2;
            }

            return Next(numSeeds, length);
        }

        private static int Next(int numSeeds, int length)
        {
            // Create a byte array to hold the random value.   
            byte[] buffer = new byte[length];
            // Create a new instance of the RNGCryptoServiceProvider.   
            System.Security.Cryptography.RNGCryptoServiceProvider Gen = new System.Security.Cryptography.RNGCryptoServiceProvider();
            // Fill the array with a random value.   
            Gen.GetBytes(buffer);
            // Convert the byte to an uint value to make the modulus operation easier.   
            uint randomResult = 0x0;//这里用uint作为生成的随机数   
            for (int i = 0; i < length; i++)
            {
                randomResult |= ((uint)buffer[i] << ((length - 1 - i) * 8));
            }
            // Return the random number mod the number   
            // of sides.  The possible values are zero-based   
            return (int)(randomResult % numSeeds);
        }


    }

 

C# 生成小于Int数值绝对值的随机数

标签:operation   ret   short   dom   buffer   create   abs   数值   i++   

原文地址:https://www.cnblogs.com/ZQWelcomeIndex/p/9523499.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!