Code l:理解这个 code_num= (_num&~(1L<<63))片段;

可以解释这段代码的作用:_num = (_num & ~(1L << 63));

我一直在阅读 RNGCryptoServiceProvider,并遇到了http://codethinktank.blogspot.co.uk/2013/04/cryptographically-secure-pseudo-random.html与代码,我可以遵循大多数代码,除了上面的部分。

我理解它确保所有数字都是正的,但我不知道它是如何做到这一点的。

完整代码

public static long GetInt64(bool allowNegativeValue = false)
{
    using (RNGCryptoServiceProvider _rng = new RNGCryptoServiceProvider())
    {
         byte[] _obj = new byte[8];
         _rng.GetBytes(_obj);
         long _num = BitConverter.ToInt64(_obj, 0);
         if (!allowNegativeValue)
         {
             _num = (_num & ~(1L << 63));
         }
         return _num;
     }
}

任何帮助解释它将不胜感激

4

<<是位移位运算符1L << 63将 1 左移 63 位或 1 后跟 630s 的结果

~是我相信按位不是,所以这将适用于上述,并导致 0 后跟 631s

&是按位的,它导致将和运算按位应用于两个操作数

最终,这似乎将其过滤为 63 位数据,因为任何更高的位都将由于和

这工作强制为正的原因是因为通常最高位(在您的情况下为 # 64)在大多数符号中用作符号位,并且此代码本质上只是0,因此强制它不是负的,即正的

4
a = ~(1L << 63) = ~0x1000000000000000 = 0x7fffffffffffffff

所以m &= a清除m的最高位,从而确保它是正的,假设使用有符号整数的two's complement编码。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(207)
开关灯c语言:如何在角度开 /关灯(off light)
上一篇
Cdr辅助线怎么调出来:在 tikz中绘制辅助线(drawing lines in tikz)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(29条)