17 Int64::Int64(uint HighPart,uint LowPart)
19 Int64::HighPart=HighPart;
20 Int64::LowPart=LowPart;
25 Int64 Int64::operator = (Int64 n)
34 Int64 Int64::operator << (int n)
40 if (res.LowPart & 0x80000000)
48 Int64 Int64::operator >> (int n)
55 res.LowPart|=0x80000000;
62 Int64 operator / (Int64 n1,Int64 n2)
64 if (n1.HighPart==0 && n2.HighPart==0)
65 return(Int64(0,n1.LowPart/n2.LowPart));
74 while (ShiftCount-- >= 0)
88 Int64 operator * (Int64 n1,Int64 n2)
90 if (n1<0x10000 && n2<0x10000)
91 return(Int64(0,n1.LowPart*n2.LowPart));
93 for (int I=0;I<64;I++)
104 Int64 operator % (Int64 n1,Int64 n2)
106 if (n1.HighPart==0 && n2.HighPart==0)
107 return(Int64(0,n1.LowPart%n2.LowPart));
112 Int64 operator + (Int64 n1,Int64 n2)
114 n1.LowPart+=n2.LowPart;
115 if (n1.LowPart<n2.LowPart)
117 n1.HighPart+=n2.HighPart;
122 Int64 operator - (Int64 n1,Int64 n2)
124 if (n1.LowPart<n2.LowPart)
126 n1.LowPart-=n2.LowPart;
127 n1.HighPart-=n2.HighPart;
132 Int64 operator += (Int64 &n1,Int64 n2)
139 Int64 operator -= (Int64 &n1,Int64 n2)
146 Int64 operator *= (Int64 &n1,Int64 n2)
153 Int64 operator /= (Int64 &n1,Int64 n2)
160 Int64 operator | (Int64 n1,Int64 n2)
162 n1.LowPart|=n2.LowPart;
163 n1.HighPart|=n2.HighPart;
168 Int64 operator & (Int64 n1,Int64 n2)
170 n1.LowPart&=n2.LowPart;
171 n1.HighPart&=n2.HighPart;
177 inline void operator -= (Int64 &n1,unsigned int n2)
185 inline void operator ++ (Int64 &n)
187 if (++n.LowPart == 0)
192 inline void operator -- (Int64 &n)
194 if (n.LowPart-- == 0)
199 bool operator == (Int64 n1,Int64 n2)
201 return(n1.LowPart==n2.LowPart && n1.HighPart==n2.HighPart);
205 bool operator > (Int64 n1,Int64 n2)
207 return((int)n1.HighPart>(int)n2.HighPart || n1.HighPart==n2.HighPart && n1.LowPart>n2.LowPart);
211 bool operator < (Int64 n1,Int64 n2)
213 return((int)n1.HighPart<(int)n2.HighPart || n1.HighPart==n2.HighPart && n1.LowPart<n2.LowPart);
217 bool operator != (Int64 n1,Int64 n2)
219 return(n1.LowPart!=n2.LowPart || n1.HighPart!=n2.HighPart);
223 bool operator >= (Int64 n1,Int64 n2)
225 return(n1>n2 || n1==n2);
229 bool operator <= (Int64 n1,Int64 n2)
231 return(n1<n2 || n1==n2);
235 void Int64::Set(uint HighPart,uint LowPart)
237 Int64::HighPart=HighPart;
238 Int64::LowPart=LowPart;
242 void itoa(Int64 n,char *Str)
246 sprintf(Str,"%u",int64to32(n));
255 NumStr[Pos++]=int64to32(n%10)+'0';
259 for (int I=0;I<Pos;I++)
260 Str[I]=NumStr[Pos-I-1];
265 Int64 atoil(char *Str)
268 while (*Str>='0' && *Str<='9')