return ret;
}
-
public static uint256 operator ++(uint256 a)
{
int i = 0;
{
return a - new uint256(b);
}
+
+ public static uint256 operator /(uint256 a, uint divisor)
+ {
+ var result = new uint256();
+
+ ulong r = 0;
+ int i = a.nWidth;
+
+ while (i-- > 0)
+ {
+ r <<= 32;
+ r |= a.pn[i];
+ result.pn[i] = (uint)(r / divisor);
+ r %= divisor;
+ }
+
+ return result;
+ }
+
+ public static uint256 operator *(uint256 a, uint multiplier)
+ {
+ var result = new uint256();
+
+ ulong c = 0;
+ uint i = 0;
+
+ do
+ {
+ c += a.pn[i] * (ulong)multiplier;
+ result.pn[i] = (uint)c;
+ c >>= 32;
+ } while (++i < result.nWidth);
+
+ return result;
+ }
+
+ public static uint operator %(uint256 a, uint divisor)
+ {
+ ulong r = 0;
+ int i = a.nWidth;
+
+ while (i-- > 0)
+ {
+ r <<= 32;
+ r |= a.pn[i];
+ r %= divisor;
+ }
+
+ return (uint)r;
+ }
+
+ public static uint256 operator /(uint256 a, uint256 divisor)
+ {
+ if (divisor.bits <= 32)
+ {
+ return a / divisor.Low32;
+ }
+
+ return Divide(a, divisor)[0];
+ }
+
+ public static uint256 operator %(uint256 a, uint256 divisor)
+ {
+ if (divisor.bits <= 32)
+ {
+ return a % divisor.Low32;
+ }
+
+ return Divide(a, divisor)[1];
+ }
#endregion
+ public static uint256[] Divide(uint256 bi1, uint256 bi2)
+ {
+ // STUB!
+
+ uint256[] ret = new uint256[2] { 0, 0 };
+
+ return ret;
+ }
+
+
+
#region Shift
public static uint256 operator <<(uint256 a, int shift)
{