35 writes to _bits
System.Runtime.Numerics (35)
System\Numerics\BigInteger.cs (35)
73_bits = null; 85_bits = null; 90_bits = [value]; 101_bits = null; 123_bits = [(nuint)x]; 127_bits = x <= uint.MaxValue ? [((uint)x)] : [(uint)x, (uint)(x >> BitsPerUInt32)]; 140_bits = null; 147_bits = [(nuint)value]; 151_bits = value <= uint.MaxValue ? [((uint)value)] : [(uint)value, (uint)(value >> BitsPerUInt32)]; 170_bits = null; 227_bits = new nuint[cu + 1]; 237_bits = new nuint[cu + 2]; 277_bits = null; 285_bits = new nuint[nuintSize]; 298_bits = new nuint[size]; 316_bits = null; 367_bits = null; 391_bits = null; 395_bits = [(uint)_sign]; 487_bits = null; 496_bits = val.AsSpan(0, len).ToArray(); 501_bits = val; 507_bits = val; 526_bits = bits; 557_bits = null; 567_bits = value.ToArray(); 637_bits = null; 644_bits = trimLen == 1 ? [magnitude] : value[..trimLen].ToArray(); 650_bits = [magnitude]; 657_bits = [value[0]]; 662_bits = null; 682_bits = value.ToArray(); 702_bits = null; 706_bits = new nuint[bits32.Length]; 712_bits = new nuint[nuintLen];
366 references to _bits
System.Runtime.Numerics (366)
System\Number.BigInteger.cs (3)
788if (value._bits == null) 835int base1E9BufferLength = (int)(value._bits.Length * digitRatio) + 1; 839BigIntegerToBase1E9(value._bits, base1E9Buffer, out int written);
System\Numerics\BigInteger.cs (363)
42/// <see cref="_sign"/> and <see cref="_bits"/> is <see langword="null"/>. 43/// For all other values, <see cref="_sign"/> is +1 or -1 and the magnitude is in <see cref="_bits"/>. 228_bits[cu] = (nuint)(man >> cbit); 231_bits[cu - 1] = (nuint)(man << (64 - cbit)); 238_bits[cu + 1] = (uint)(man >> (cbit + BitsPerUInt32)); 239_bits[cu] = (uint)(man >> cbit); 242_bits[cu - 1] = (nuint)(uint)man << (BitsPerUInt32 - cbit); 286_bits[0] = (uint)bits[0]; 289_bits[0] |= (nuint)(uint)bits[1] << 32; 292_bits[1] = (uint)bits[2]; 299_bits[0] = (uint)bits[0]; 302_bits[1] = (uint)bits[1]; 305_bits[2] = (uint)bits[2]; 313if (_bits.Length is 1 && _bits[0] <= int.MaxValue) 315_sign = _sign < 0 ? -(int)_bits[0] : (int)_bits[0]; 690/// Reads <see cref="_bits"/> as <see cref="uint"/>[] for backward compatibility with previous 707Buffer.BlockCopy(bits32, 0, _bits, 0, bits32.Length * sizeof(uint)); 717_bits[i / 2] = (nuint)(lo | (hi << 32)); 726/// Serializes <see cref="_bits"/> as <see cref="uint"/>[] for backward compatibility with previous 735if (_bits is not null) 739bits32 = new uint[_bits.Length]; 740Buffer.BlockCopy(_bits, 0, bits32, 0, _bits.Length * sizeof(uint)); 744int len = _bits.Length * 2; 745if ((uint)(_bits[^1] >> 32) == 0) 751for (int i = 0; i < _bits.Length; i++) 753bits32[i * 2] = (uint)_bits[i]; 756bits32[i * 2 + 1] = (uint)(_bits[i] >> 32); 775if (_bits is null) 785int iu = _bits.Length - 1; 786return BitOperations.IsPow2(_bits[iu]) && !_bits.AsSpan(0, iu).ContainsAnyExcept(0u); 792public bool IsOne => _sign == 1 && _bits is null; 794public bool IsEven => _bits is null ? (_sign & 1) == 0 : (_bits[0] & 1) == 0; 866return new BigInteger((int)NumericsHelpers.Abs(value._sign), value._bits); 896bool trivialDividend = dividend._bits is null; 897bool trivialDivisor = divisor._bits is null; 915Debug.Assert(dividend._bits is not null); 919int size = dividend._bits.Length; 924BigIntegerCalculator.Divide(dividend._bits, NumericsHelpers.Abs(divisor._sign), quotient, out nuint rest); 930Debug.Assert(divisor._bits is not null); 932if (dividend._bits.Length < divisor._bits.Length) 939int size = dividend._bits.Length; 942size = dividend._bits.Length - divisor._bits.Length + 1; 945BigIntegerCalculator.Divide(dividend._bits, divisor._bits, quotient, rest); 984if (value._bits is null) 996h = value._bits[^1]; 997m = value._bits.Length > 1 ? value._bits[^2] : 0; 1000b = (long)value._bits.Length * 64 - c; 1007h = (uint)value._bits[^1]; 1008m = value._bits.Length > 1 ? (uint)value._bits[^2] : 0; 1009l = value._bits.Length > 2 ? (uint)value._bits[^3] : 0; 1013b = (long)value._bits.Length * 32 - c; 1031bool trivialLeft = left._bits is null; 1032bool trivialRight = right._bits is null; 1041Debug.Assert(right._bits is not null); 1043? BigIntegerCalculator.Gcd(right._bits, NumericsHelpers.Abs(left._sign)) 1044: new BigInteger(+1, right._bits); 1049Debug.Assert(left._bits is not null); 1051? BigIntegerCalculator.Gcd(left._bits, NumericsHelpers.Abs(right._sign)) 1052: new BigInteger(+1, left._bits); 1055Debug.Assert(left._bits is not null && right._bits is not null); 1057return BigIntegerCalculator.Compare(left._bits, right._bits) < 0 1058? GreatestCommonDivisor(right._bits, left._bits) 1059: GreatestCommonDivisor(left._bits, right._bits); 1112bool trivialValue = value._bits is null; 1113bool trivialExponent = exponent._bits is null; 1114bool trivialModulus = modulus._bits is null; 1121trivialValue ? BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), exponent._bits!, NumericsHelpers.Abs(modulus._sign)) : 1122trivialExponent ? BigIntegerCalculator.Pow(value._bits!, NumericsHelpers.Abs(exponent._sign), NumericsHelpers.Abs(modulus._sign)) : 1123BigIntegerCalculator.Pow(value._bits!, exponent._bits!, NumericsHelpers.Abs(modulus._sign)); 1129int size = (modulus._bits?.Length ?? 1) << 1; 1135BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), NumericsHelpers.Abs(exponent._sign), modulus._bits!, bits); 1139BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), exponent._bits!, modulus._bits!, bits); 1144BigIntegerCalculator.Pow(value._bits!, NumericsHelpers.Abs(exponent._sign), modulus._bits!, bits); 1148BigIntegerCalculator.Pow(value._bits!, exponent._bits!, modulus._bits!, bits); 1173bool trivialValue = value._bits is null; 1204int size = BigIntegerCalculator.PowBound(power, value._bits!.Length); 1207BigIntegerCalculator.Pow(value._bits, power, bits); 1217if (_bits is null) 1223hash.AddBytes(MemoryMarshal.AsBytes(_bits.AsSpan())); 1235if (_bits is null) 1242if ((_sign ^ other) < 0 || (cu = _bits.Length) > maxLimbs) 1251return _bits[0] == uu; 1256? (uint)_bits[0] == uu 1257: ((ulong)(uint)_bits[1] << 32 | (uint)_bits[0]) == uu; 1269if (_bits is null) 1274int cu = _bits.Length; 1283return _bits[0] == other; 1288? (uint)_bits[0] == other 1289: ((ulong)(uint)_bits[1] << 32 | (uint)_bits[0]) == other; 1295return _sign == other._sign && _bits.AsSpan().SequenceEqual(other._bits); 1300if (_bits is null) 1307if ((_sign ^ other) < 0 || (cu = _bits.Length) > maxLimbs) 1317uuTmp = _bits[0]; 1322? ((ulong)(uint)_bits[1] << 32 | (uint)_bits[0]) 1323: (uint)_bits[0]; 1337if (_bits is null) 1342int cu = _bits.Length; 1353uuTmp = _bits[0]; 1358? ((ulong)(uint)_bits[1] << 32 | (uint)_bits[0]) 1359: (uint)_bits[0]; 1374if (_bits is null) 1377other._bits is not null ? -other._sign : 1383if (other._bits is null) 1388int bitsResult = BigIntegerCalculator.Compare(_bits, other._bits); 1552nuint[]? bits = _bits; 1728Debug.Assert(_bits is null || _sign == 0 ? buffer.Length == 2 : buffer.Length >= _bits.Length + 1); 1732if (_bits is null) 1739_bits.CopyTo(buffer); 1740buffer = buffer.Slice(0, _bits.Length + 1); 1803if ((_bits is null) || (_bits.Length <= 4)) 1818highBits = _bits[^1]; 1819lowBitsCount = _bits.Length - 1; 1823highBits = ((ulong)_bits[^1] << BitsPerUInt32) + (uint)_bits[^2]; 1824lowBitsCount = _bits.Length - 2; 1930if (left._bits is null && right._bits is null) 1936? Add(left._bits, left._sign, right._bits, -right._sign) 1937: Subtract(left._bits, left._sign, right._bits, right._sign); 2008if (value._bits is null) 2019nuint[]? bits = value._bits; 2079if (value._bits is null) 2084if (value._bits.Length > 1) 2092return checked((int)value._bits[0]); 2095if (value._bits[0] > UInt32HighBit) 2101return -(int)value._bits[0]; 2106if (value._bits is null) 2111int len = value._bits.Length; 2122uu = value._bits[0]; 2127? ((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2128: (uint)value._bits[0]; 2146if (value._bits is null) 2151int len = value._bits.Length; 2163uu = len > 1 ? new UInt128(value._bits[1], value._bits[0]) : (UInt128)(ulong)value._bits[0]; 2168((ulong)((len > 3) ? (uint)value._bits[3] : 0) << 32 | (uint)value._bits[2]), 2169((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2175? (UInt128)((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2176: (UInt128)(uint)value._bits[0]; 2206if (value._bits is null) 2212return value._bits.Length <= 1 && value._sign >= 0 2213? checked((uint)value._bits[0]) 2221if (value._bits is null) 2226int len = value._bits.Length; 2235return value._bits[0]; 2239? ((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2240: (uint)value._bits[0]; 2249if (value._bits is null) 2254int len = value._bits.Length; 2265? new UInt128(value._bits[1], value._bits[0]) 2266: (UInt128)(ulong)value._bits[0]; 2271((ulong)((len > 3) ? (uint)value._bits[3] : 0) << 32 | (uint)value._bits[2]), 2272((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2277return ((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]); 2280return (uint)value._bits[0]; 2484left._bits is null && right._bits is null ? (BigInteger)(left._sign & right._sign) : 2499return left._bits is null && right._bits is null 2505left._bits is null && right._bits is null 2515int xLen = left._bits?.Length ?? 1; 2516int yLen = right._bits?.Length ?? 1; 2534int xLen = left._bits?.Length ?? 1; 2535int yLen = right._bits?.Length ?? 1; 2544int xLen = left._bits?.Length ?? 1; 2545int yLen = right._bits?.Length ?? 1; 2555left._bits, left._sign, 2556right._bits, right._sign, 2585if (value._bits is null) 2591ReadOnlySpan<nuint> bits = value._bits; 2679if (value._bits is null) 2692ReadOnlySpan<nuint> bits = value._bits; 2732if (value._bits is null) 2742int size = value._bits.Length + 1; 2745BigIntegerCalculator.Add(value._bits, 1, bits); 2752Span<nuint> bits = RentedBuffer.Create(value._bits.Length, out RentedBuffer bitsBuffer); 2754BigIntegerCalculator.Subtract(value._bits, 1, bits); 2762public static BigInteger operator -(BigInteger value) => new BigInteger(-value._sign, value._bits); 2768if (value._bits is null) 2777int size = value._bits.Length + 1; 2780BigIntegerCalculator.Add(value._bits, 1, bits); 2786Span<nuint> bits = RentedBuffer.Create(value._bits.Length, out RentedBuffer bitsBuffer); 2788BigIntegerCalculator.Subtract(value._bits, 1, bits); 2798if (value._bits is null) 2807Span<nuint> bits = RentedBuffer.Create(value._bits.Length, out RentedBuffer bitsBuffer); 2809BigIntegerCalculator.Subtract(value._bits, 1, bits); 2815int size = value._bits.Length + 1; 2818BigIntegerCalculator.Add(value._bits, 1, bits); 2828if (left._bits is null && right._bits is null) 2834? Subtract(left._bits, left._sign, right._bits, -right._sign) 2835: Add(left._bits, left._sign, right._bits, right._sign); 2839left._bits is null && right._bits is null 2841: Multiply(left._bits, left._sign, right._bits, right._sign); 2900bool trivialDividend = dividend._bits is null; 2901bool trivialDivisor = divisor._bits is null; 2917Debug.Assert(dividend._bits is not null); 2919int size = dividend._bits.Length; 2923BigIntegerCalculator.Divide(dividend._bits, NumericsHelpers.Abs(divisor._sign), quotient); 2932Debug.Assert(dividend._bits is not null && divisor._bits is not null); 2934if (dividend._bits.Length < divisor._bits.Length) 2940int size = dividend._bits.Length - divisor._bits.Length + 1; 2943BigIntegerCalculator.Divide(dividend._bits, divisor._bits, quotient); 2954bool trivialDividend = dividend._bits is null; 2955bool trivialDivisor = divisor._bits is null; 2971Debug.Assert(dividend._bits is not null); 2972nuint remainder = BigIntegerCalculator.Remainder(dividend._bits, NumericsHelpers.Abs(divisor._sign)); 2976Debug.Assert(dividend._bits is not null && divisor._bits is not null); 2978if (dividend._bits.Length < divisor._bits.Length) 2983int size = dividend._bits.Length; 2986BigIntegerCalculator.Remainder(dividend._bits, divisor._bits, bits); 3076nuint[]? bits = _bits; 3112if (_bits is not null) 3117Debug.Assert(_bits.Length > 0); 3119Debug.Assert(_bits.Length > 1 || _bits[0] > int.MaxValue); 3121Debug.Assert(_bits[^1] != 0); 3123Debug.Assert(_bits.Length <= MaxLength); 3154if (value._bits is null) 3183if (value._bits is null) 3192? BitOperations.LeadingZeroCount(value._bits[^1]) 3199if (value._bits is null) 3210for (int i = 0; i < value._bits.Length; i++) 3212nuint part = value._bits[i]; 3228part = ~value._bits[i] + 1; 3233while ((part == 0) && (i < value._bits.Length)); 3235while (i < value._bits.Length) 3239part = ~value._bits[i]; 3258if (value._bits is null) 3266return Rotate(value._bits, neg, rotateAmount); 3279if (value._bits is null) 3287return Rotate(value._bits, neg, -(long)rotateAmount); 3346if (value._bits is null) 3356nuint part = value._bits[0]; 3358for (int i = 1; (part == 0) && (i < value._bits.Length); i++) 3360part = value._bits[i]; 3386nuint[]? bits = _bits; 3426nuint[]? bits = _bits; 3504nuint[]? bits = _bits; 3579nuint[]? bits = _bits; 3630return value._bits is null 3632: (BigInteger)(((long)value._bits.Length * BigIntegerCalculator.BitsPerLimb - 1) ^ BitOperations.LeadingZeroCount(value._bits[^1])); 3677if (value._bits is null) 3684if (sign._bits is null) 3701return value._bits is null 3779return value._bits is null 3781: (value._bits[0] & 1) == 0; 3814return value._bits is null 3816: (value._bits[0] & 1) != 0; 4365if (value._bits is not null) 4382if (value._bits is not null) 4424if (value._bits is not null) 4441if (value._bits is not null) 4485if (value._bits is not null) 4508if (value._bits is not null) 4564if (value._bits is not null) 4566nuint bits = value._bits[0]; 4587if (value._bits is not null) 4589nuint bits = value._bits[0]; 4635if (value._bits is not null) 4637actualResult = IsNegative(value) ? (short)(~value._bits[0] + 1) : (short)value._bits[0]; 4651if (value._bits is not null) 4653actualResult = IsNegative(value) ? (int)(~value._bits[0] + 1) : (int)value._bits[0]; 4667if (value._bits is not null) 4673bits = value._bits[0]; 4679if (value._bits.Length >= 2) 4681bits = value._bits[1]; 4685bits |= value._bits[0]; 4707if (value._bits is not null) 4714lowerBits = value._bits[0]; 4716if (value._bits.Length >= 2) 4718upperBits = value._bits[1]; 4723if (value._bits.Length >= 4) 4725upperBits = value._bits[3]; 4729if (value._bits.Length >= 3) 4731upperBits |= value._bits[2]; 4734if (value._bits.Length >= 2) 4736lowerBits = value._bits[1]; 4740lowerBits |= value._bits[0]; 4764if (value._bits is not null) 4766nuint bits = value._bits[0]; 4793if (value._bits is not null) 4795actualResult = IsNegative(value) ? (sbyte)(~value._bits[0] + 1) : (sbyte)value._bits[0]; 4815if (value._bits is not null) 4817nuint bits = value._bits[0]; 4838if (value._bits is not null) 4840uint bits = (uint)value._bits[0]; 4861if (value._bits is not null) 4867bits = value._bits[0]; 4873if (value._bits.Length >= 2) 4875bits = value._bits[1]; 4879bits |= value._bits[0]; 4901if (value._bits is not null) 4908lowerBits = value._bits[0]; 4910if (value._bits.Length >= 2) 4912upperBits = value._bits[1]; 4917if (value._bits.Length >= 4) 4919upperBits = value._bits[3]; 4923if (value._bits.Length >= 3) 4925upperBits |= value._bits[2]; 4928if (value._bits.Length >= 2) 4930lowerBits = value._bits[1]; 4934lowerBits |= value._bits[0]; 4958if (value._bits is not null) 4960nuint bits = value._bits[0]; 5015if (value._bits is null) 5027ReadOnlySpan<nuint> bits = value._bits;