gpt4 book ai didi

c# - 理解这段代码 _num = (_num & ~(1L << 63));

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:43 32 4
gpt4 key购买 nike

谁能解释一下这段代码的作用:_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;
}
}

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

最佳答案

<<是位移运算符 1L << 63结果将 1 左移 63 个位置或 1 后跟 63 0

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

&是按位与,它导致将与操作按位应用于两个操作数

最终这似乎是将它过滤成 63 位数据,因为任何更高的位都将由于和而被清零

之所以强制为正,是因为通常最高位(在您的情况下为#64)在大多数符号中用作符号位,并且此代码本质上只是0 s it out,从而迫使它不是负数,即正数

关于c# - 理解这段代码 _num = (_num & ~(1L << 63));,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18654386/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com