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)
788
if (value.
_bits
== null)
835
int base1E9BufferLength = (int)(value.
_bits
.Length * digitRatio) + 1;
839
BigIntegerToBase1E9(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];
313
if (
_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
707
Buffer.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
735
if (
_bits
is not null)
739
bits32 = new uint[
_bits
.Length];
740
Buffer.BlockCopy(
_bits
, 0, bits32, 0,
_bits
.Length * sizeof(uint));
744
int len =
_bits
.Length * 2;
745
if ((uint)(
_bits
[^1] >> 32) == 0)
751
for (int i = 0; i <
_bits
.Length; i++)
753
bits32[i * 2] = (uint)
_bits
[i];
756
bits32[i * 2 + 1] = (uint)(
_bits
[i] >> 32);
775
if (
_bits
is null)
785
int iu =
_bits
.Length - 1;
786
return BitOperations.IsPow2(
_bits
[iu]) && !
_bits
.AsSpan(0, iu).ContainsAnyExcept(0u);
792
public bool IsOne => _sign == 1 &&
_bits
is null;
794
public bool IsEven =>
_bits
is null ? (_sign & 1) == 0 : (
_bits
[0] & 1) == 0;
866
return new BigInteger((int)NumericsHelpers.Abs(value._sign), value.
_bits
);
896
bool trivialDividend = dividend.
_bits
is null;
897
bool trivialDivisor = divisor.
_bits
is null;
915
Debug.Assert(dividend.
_bits
is not null);
919
int size = dividend.
_bits
.Length;
924
BigIntegerCalculator.Divide(dividend.
_bits
, NumericsHelpers.Abs(divisor._sign), quotient, out nuint rest);
930
Debug.Assert(divisor.
_bits
is not null);
932
if (dividend.
_bits
.Length < divisor.
_bits
.Length)
939
int size = dividend.
_bits
.Length;
942
size = dividend.
_bits
.Length - divisor.
_bits
.Length + 1;
945
BigIntegerCalculator.Divide(dividend.
_bits
, divisor.
_bits
, quotient, rest);
984
if (value.
_bits
is null)
996
h = value.
_bits
[^1];
997
m = value.
_bits
.Length > 1 ? value.
_bits
[^2] : 0;
1000
b = (long)value.
_bits
.Length * 64 - c;
1007
h = (uint)value.
_bits
[^1];
1008
m = value.
_bits
.Length > 1 ? (uint)value.
_bits
[^2] : 0;
1009
l = value.
_bits
.Length > 2 ? (uint)value.
_bits
[^3] : 0;
1013
b = (long)value.
_bits
.Length * 32 - c;
1031
bool trivialLeft = left.
_bits
is null;
1032
bool trivialRight = right.
_bits
is null;
1041
Debug.Assert(right.
_bits
is not null);
1043
? BigIntegerCalculator.Gcd(right.
_bits
, NumericsHelpers.Abs(left._sign))
1044
: new BigInteger(+1, right.
_bits
);
1049
Debug.Assert(left.
_bits
is not null);
1051
? BigIntegerCalculator.Gcd(left.
_bits
, NumericsHelpers.Abs(right._sign))
1052
: new BigInteger(+1, left.
_bits
);
1055
Debug.Assert(left.
_bits
is not null && right.
_bits
is not null);
1057
return BigIntegerCalculator.Compare(left.
_bits
, right.
_bits
) < 0
1058
? GreatestCommonDivisor(right.
_bits
, left.
_bits
)
1059
: GreatestCommonDivisor(left.
_bits
, right.
_bits
);
1112
bool trivialValue = value.
_bits
is null;
1113
bool trivialExponent = exponent.
_bits
is null;
1114
bool trivialModulus = modulus.
_bits
is null;
1121
trivialValue ? BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), exponent.
_bits
!, NumericsHelpers.Abs(modulus._sign)) :
1122
trivialExponent ? BigIntegerCalculator.Pow(value.
_bits
!, NumericsHelpers.Abs(exponent._sign), NumericsHelpers.Abs(modulus._sign)) :
1123
BigIntegerCalculator.Pow(value.
_bits
!, exponent.
_bits
!, NumericsHelpers.Abs(modulus._sign));
1129
int size = (modulus.
_bits
?.Length ?? 1) << 1;
1135
BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), NumericsHelpers.Abs(exponent._sign), modulus.
_bits
!, bits);
1139
BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), exponent.
_bits
!, modulus.
_bits
!, bits);
1144
BigIntegerCalculator.Pow(value.
_bits
!, NumericsHelpers.Abs(exponent._sign), modulus.
_bits
!, bits);
1148
BigIntegerCalculator.Pow(value.
_bits
!, exponent.
_bits
!, modulus.
_bits
!, bits);
1173
bool trivialValue = value.
_bits
is null;
1204
int size = BigIntegerCalculator.PowBound(power, value.
_bits
!.Length);
1207
BigIntegerCalculator.Pow(value.
_bits
, power, bits);
1217
if (
_bits
is null)
1223
hash.AddBytes(MemoryMarshal.AsBytes(
_bits
.AsSpan()));
1235
if (
_bits
is null)
1242
if ((_sign ^ other) < 0 || (cu =
_bits
.Length) > maxLimbs)
1251
return
_bits
[0] == uu;
1256
? (uint)
_bits
[0] == uu
1257
: ((ulong)(uint)
_bits
[1] << 32 | (uint)
_bits
[0]) == uu;
1269
if (
_bits
is null)
1274
int cu =
_bits
.Length;
1283
return
_bits
[0] == other;
1288
? (uint)
_bits
[0] == other
1289
: ((ulong)(uint)
_bits
[1] << 32 | (uint)
_bits
[0]) == other;
1295
return _sign == other._sign &&
_bits
.AsSpan().SequenceEqual(other.
_bits
);
1300
if (
_bits
is null)
1307
if ((_sign ^ other) < 0 || (cu =
_bits
.Length) > maxLimbs)
1317
uuTmp =
_bits
[0];
1322
? ((ulong)(uint)
_bits
[1] << 32 | (uint)
_bits
[0])
1323
: (uint)
_bits
[0];
1337
if (
_bits
is null)
1342
int cu =
_bits
.Length;
1353
uuTmp =
_bits
[0];
1358
? ((ulong)(uint)
_bits
[1] << 32 | (uint)
_bits
[0])
1359
: (uint)
_bits
[0];
1374
if (
_bits
is null)
1377
other.
_bits
is not null ? -other._sign :
1383
if (other.
_bits
is null)
1388
int bitsResult = BigIntegerCalculator.Compare(
_bits
, other.
_bits
);
1552
nuint[]? bits =
_bits
;
1728
Debug.Assert(
_bits
is null || _sign == 0 ? buffer.Length == 2 : buffer.Length >=
_bits
.Length + 1);
1732
if (
_bits
is null)
1739
_bits
.CopyTo(buffer);
1740
buffer = buffer.Slice(0,
_bits
.Length + 1);
1803
if ((
_bits
is null) || (
_bits
.Length <= 4))
1818
highBits =
_bits
[^1];
1819
lowBitsCount =
_bits
.Length - 1;
1823
highBits = ((ulong)
_bits
[^1] << BitsPerUInt32) + (uint)
_bits
[^2];
1824
lowBitsCount =
_bits
.Length - 2;
1930
if (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);
2008
if (value.
_bits
is null)
2019
nuint[]? bits = value.
_bits
;
2079
if (value.
_bits
is null)
2084
if (value.
_bits
.Length > 1)
2092
return checked((int)value.
_bits
[0]);
2095
if (value.
_bits
[0] > UInt32HighBit)
2101
return -(int)value.
_bits
[0];
2106
if (value.
_bits
is null)
2111
int len = value.
_bits
.Length;
2122
uu = value.
_bits
[0];
2127
? ((ulong)(uint)value.
_bits
[1] << 32 | (uint)value.
_bits
[0])
2128
: (uint)value.
_bits
[0];
2146
if (value.
_bits
is null)
2151
int len = value.
_bits
.Length;
2163
uu = 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];
2206
if (value.
_bits
is null)
2212
return value.
_bits
.Length <= 1 && value._sign >= 0
2213
? checked((uint)value.
_bits
[0])
2221
if (value.
_bits
is null)
2226
int len = value.
_bits
.Length;
2235
return value.
_bits
[0];
2239
? ((ulong)(uint)value.
_bits
[1] << 32 | (uint)value.
_bits
[0])
2240
: (uint)value.
_bits
[0];
2249
if (value.
_bits
is null)
2254
int 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])
2277
return ((ulong)(uint)value.
_bits
[1] << 32 | (uint)value.
_bits
[0]);
2280
return (uint)value.
_bits
[0];
2484
left.
_bits
is null && right.
_bits
is null ? (BigInteger)(left._sign & right._sign) :
2499
return left.
_bits
is null && right.
_bits
is null
2505
left.
_bits
is null && right.
_bits
is null
2515
int xLen = left.
_bits
?.Length ?? 1;
2516
int yLen = right.
_bits
?.Length ?? 1;
2534
int xLen = left.
_bits
?.Length ?? 1;
2535
int yLen = right.
_bits
?.Length ?? 1;
2544
int xLen = left.
_bits
?.Length ?? 1;
2545
int yLen = right.
_bits
?.Length ?? 1;
2555
left.
_bits
, left._sign,
2556
right.
_bits
, right._sign,
2585
if (value.
_bits
is null)
2591
ReadOnlySpan<nuint> bits = value.
_bits
;
2679
if (value.
_bits
is null)
2692
ReadOnlySpan<nuint> bits = value.
_bits
;
2732
if (value.
_bits
is null)
2742
int size = value.
_bits
.Length + 1;
2745
BigIntegerCalculator.Add(value.
_bits
, 1, bits);
2752
Span<nuint> bits = RentedBuffer.Create(value.
_bits
.Length, out RentedBuffer bitsBuffer);
2754
BigIntegerCalculator.Subtract(value.
_bits
, 1, bits);
2762
public static BigInteger operator -(BigInteger value) => new BigInteger(-value._sign, value.
_bits
);
2768
if (value.
_bits
is null)
2777
int size = value.
_bits
.Length + 1;
2780
BigIntegerCalculator.Add(value.
_bits
, 1, bits);
2786
Span<nuint> bits = RentedBuffer.Create(value.
_bits
.Length, out RentedBuffer bitsBuffer);
2788
BigIntegerCalculator.Subtract(value.
_bits
, 1, bits);
2798
if (value.
_bits
is null)
2807
Span<nuint> bits = RentedBuffer.Create(value.
_bits
.Length, out RentedBuffer bitsBuffer);
2809
BigIntegerCalculator.Subtract(value.
_bits
, 1, bits);
2815
int size = value.
_bits
.Length + 1;
2818
BigIntegerCalculator.Add(value.
_bits
, 1, bits);
2828
if (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);
2839
left.
_bits
is null && right.
_bits
is null
2841
: Multiply(left.
_bits
, left._sign, right.
_bits
, right._sign);
2900
bool trivialDividend = dividend.
_bits
is null;
2901
bool trivialDivisor = divisor.
_bits
is null;
2917
Debug.Assert(dividend.
_bits
is not null);
2919
int size = dividend.
_bits
.Length;
2923
BigIntegerCalculator.Divide(dividend.
_bits
, NumericsHelpers.Abs(divisor._sign), quotient);
2932
Debug.Assert(dividend.
_bits
is not null && divisor.
_bits
is not null);
2934
if (dividend.
_bits
.Length < divisor.
_bits
.Length)
2940
int size = dividend.
_bits
.Length - divisor.
_bits
.Length + 1;
2943
BigIntegerCalculator.Divide(dividend.
_bits
, divisor.
_bits
, quotient);
2954
bool trivialDividend = dividend.
_bits
is null;
2955
bool trivialDivisor = divisor.
_bits
is null;
2971
Debug.Assert(dividend.
_bits
is not null);
2972
nuint remainder = BigIntegerCalculator.Remainder(dividend.
_bits
, NumericsHelpers.Abs(divisor._sign));
2976
Debug.Assert(dividend.
_bits
is not null && divisor.
_bits
is not null);
2978
if (dividend.
_bits
.Length < divisor.
_bits
.Length)
2983
int size = dividend.
_bits
.Length;
2986
BigIntegerCalculator.Remainder(dividend.
_bits
, divisor.
_bits
, bits);
3076
nuint[]? bits =
_bits
;
3112
if (
_bits
is not null)
3117
Debug.Assert(
_bits
.Length > 0);
3119
Debug.Assert(
_bits
.Length > 1 ||
_bits
[0] > int.MaxValue);
3121
Debug.Assert(
_bits
[^1] != 0);
3123
Debug.Assert(
_bits
.Length <= MaxLength);
3154
if (value.
_bits
is null)
3183
if (value.
_bits
is null)
3192
? BitOperations.LeadingZeroCount(value.
_bits
[^1])
3199
if (value.
_bits
is null)
3210
for (int i = 0; i < value.
_bits
.Length; i++)
3212
nuint part = value.
_bits
[i];
3228
part = ~value.
_bits
[i] + 1;
3233
while ((part == 0) && (i < value.
_bits
.Length));
3235
while (i < value.
_bits
.Length)
3239
part = ~value.
_bits
[i];
3258
if (value.
_bits
is null)
3266
return Rotate(value.
_bits
, neg, rotateAmount);
3279
if (value.
_bits
is null)
3287
return Rotate(value.
_bits
, neg, -(long)rotateAmount);
3346
if (value.
_bits
is null)
3356
nuint part = value.
_bits
[0];
3358
for (int i = 1; (part == 0) && (i < value.
_bits
.Length); i++)
3360
part = value.
_bits
[i];
3386
nuint[]? bits =
_bits
;
3426
nuint[]? bits =
_bits
;
3504
nuint[]? bits =
_bits
;
3579
nuint[]? bits =
_bits
;
3630
return value.
_bits
is null
3632
: (BigInteger)(((long)value.
_bits
.Length * BigIntegerCalculator.BitsPerLimb - 1) ^ BitOperations.LeadingZeroCount(value.
_bits
[^1]));
3677
if (value.
_bits
is null)
3684
if (sign.
_bits
is null)
3701
return value.
_bits
is null
3779
return value.
_bits
is null
3781
: (value.
_bits
[0] & 1) == 0;
3814
return value.
_bits
is null
3816
: (value.
_bits
[0] & 1) != 0;
4365
if (value.
_bits
is not null)
4382
if (value.
_bits
is not null)
4424
if (value.
_bits
is not null)
4441
if (value.
_bits
is not null)
4485
if (value.
_bits
is not null)
4508
if (value.
_bits
is not null)
4564
if (value.
_bits
is not null)
4566
nuint bits = value.
_bits
[0];
4587
if (value.
_bits
is not null)
4589
nuint bits = value.
_bits
[0];
4635
if (value.
_bits
is not null)
4637
actualResult = IsNegative(value) ? (short)(~value.
_bits
[0] + 1) : (short)value.
_bits
[0];
4651
if (value.
_bits
is not null)
4653
actualResult = IsNegative(value) ? (int)(~value.
_bits
[0] + 1) : (int)value.
_bits
[0];
4667
if (value.
_bits
is not null)
4673
bits = value.
_bits
[0];
4679
if (value.
_bits
.Length >= 2)
4681
bits = value.
_bits
[1];
4685
bits |= value.
_bits
[0];
4707
if (value.
_bits
is not null)
4714
lowerBits = value.
_bits
[0];
4716
if (value.
_bits
.Length >= 2)
4718
upperBits = value.
_bits
[1];
4723
if (value.
_bits
.Length >= 4)
4725
upperBits = value.
_bits
[3];
4729
if (value.
_bits
.Length >= 3)
4731
upperBits |= value.
_bits
[2];
4734
if (value.
_bits
.Length >= 2)
4736
lowerBits = value.
_bits
[1];
4740
lowerBits |= value.
_bits
[0];
4764
if (value.
_bits
is not null)
4766
nuint bits = value.
_bits
[0];
4793
if (value.
_bits
is not null)
4795
actualResult = IsNegative(value) ? (sbyte)(~value.
_bits
[0] + 1) : (sbyte)value.
_bits
[0];
4815
if (value.
_bits
is not null)
4817
nuint bits = value.
_bits
[0];
4838
if (value.
_bits
is not null)
4840
uint bits = (uint)value.
_bits
[0];
4861
if (value.
_bits
is not null)
4867
bits = value.
_bits
[0];
4873
if (value.
_bits
.Length >= 2)
4875
bits = value.
_bits
[1];
4879
bits |= value.
_bits
[0];
4901
if (value.
_bits
is not null)
4908
lowerBits = value.
_bits
[0];
4910
if (value.
_bits
.Length >= 2)
4912
upperBits = value.
_bits
[1];
4917
if (value.
_bits
.Length >= 4)
4919
upperBits = value.
_bits
[3];
4923
if (value.
_bits
.Length >= 3)
4925
upperBits |= value.
_bits
[2];
4928
if (value.
_bits
.Length >= 2)
4930
lowerBits = value.
_bits
[1];
4934
lowerBits |= value.
_bits
[0];
4958
if (value.
_bits
is not null)
4960
nuint bits = value.
_bits
[0];
5015
if (value.
_bits
is null)
5027
ReadOnlySpan<nuint> bits = value.
_bits
;