⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 int64.cpp

📁 由7-zip提供的压缩、解压缩程序
💻 CPP
字号:
#include "rar.hpp"#ifndef NATIVE_INT64Int64::Int64(){}Int64::Int64(uint n){  HighPart=0;  LowPart=n;}Int64::Int64(uint HighPart,uint LowPart){  Int64::HighPart=HighPart;  Int64::LowPart=LowPart;}/*Int64 Int64::operator = (Int64 n){  HighPart=n.HighPart;  LowPart=n.LowPart;  return(*this);}*/Int64 Int64::operator << (int n){  Int64 res=*this;  while (n--)  {    res.HighPart<<=1;    if (res.LowPart & 0x80000000)      res.HighPart|=1;    res.LowPart<<=1;  }  return(res);}Int64 Int64::operator >> (int n){  Int64 res=*this;  while (n--)  {    res.LowPart>>=1;    if (res.HighPart & 1)      res.LowPart|=0x80000000;    res.HighPart>>=1;  }  return(res);}Int64 operator / (Int64 n1,Int64 n2){  if (n1.HighPart==0 && n2.HighPart==0)    return(Int64(0,n1.LowPart/n2.LowPart));  int ShiftCount=0;  while (n1>n2)  {    n2=n2<<1;    if (++ShiftCount>64)      return(0);  }  Int64 res=0;  while (ShiftCount-- >= 0)  {    res=res<<1;    if (n1>=n2)    {      n1-=n2;      ++res;    }    n2=n2>>1;  }  return(res);}Int64 operator * (Int64 n1,Int64 n2){  if (n1<0x10000 && n2<0x10000)    return(Int64(0,n1.LowPart*n2.LowPart));  Int64 res=0;  for (int I=0;I<64;I++)  {    if (n2.LowPart & 1)      res+=n1;    n1=n1<<1;    n2=n2>>1;  }  return(res);}Int64 operator % (Int64 n1,Int64 n2){  if (n1.HighPart==0 && n2.HighPart==0)    return(Int64(0,n1.LowPart%n2.LowPart));  return(n1-n1/n2*n2);}Int64 operator + (Int64 n1,Int64 n2){  n1.LowPart+=n2.LowPart;  if (n1.LowPart<n2.LowPart)    n1.HighPart++;  n1.HighPart+=n2.HighPart;  return(n1);}Int64 operator - (Int64 n1,Int64 n2){  if (n1.LowPart<n2.LowPart)    n1.HighPart--;  n1.LowPart-=n2.LowPart;  n1.HighPart-=n2.HighPart;  return(n1);}Int64 operator += (Int64 &n1,Int64 n2){  n1=n1+n2;  return(n1);}Int64 operator -= (Int64 &n1,Int64 n2){  n1=n1-n2;  return(n1);}Int64 operator *= (Int64 &n1,Int64 n2){  n1=n1*n2;  return(n1);}Int64 operator /= (Int64 &n1,Int64 n2){  n1=n1/n2;  return(n1);}Int64 operator | (Int64 n1,Int64 n2){  n1.LowPart|=n2.LowPart;  n1.HighPart|=n2.HighPart;  return(n1);}Int64 operator & (Int64 n1,Int64 n2){  n1.LowPart&=n2.LowPart;  n1.HighPart&=n2.HighPart;  return(n1);}/*inline void operator -= (Int64 &n1,unsigned int n2){  if (n1.LowPart<n2)    n1.HighPart--;  n1.LowPart-=n2;}inline void operator ++ (Int64 &n){  if (++n.LowPart == 0)    ++n.HighPart;}inline void operator -- (Int64 &n){  if (n.LowPart-- == 0)    n.HighPart--;}*/bool operator == (Int64 n1,Int64 n2){  return(n1.LowPart==n2.LowPart && n1.HighPart==n2.HighPart);}bool operator > (Int64 n1,Int64 n2){  return((int)n1.HighPart>(int)n2.HighPart || n1.HighPart==n2.HighPart && n1.LowPart>n2.LowPart);}bool operator < (Int64 n1,Int64 n2){  return((int)n1.HighPart<(int)n2.HighPart || n1.HighPart==n2.HighPart && n1.LowPart<n2.LowPart);}bool operator != (Int64 n1,Int64 n2){  return(n1.LowPart!=n2.LowPart || n1.HighPart!=n2.HighPart);}bool operator >= (Int64 n1,Int64 n2){  return(n1>n2 || n1==n2);}bool operator <= (Int64 n1,Int64 n2){  return(n1<n2 || n1==n2);}void Int64::Set(uint HighPart,uint LowPart){  Int64::HighPart=HighPart;  Int64::LowPart=LowPart;}#endifvoid itoa(Int64 n,char *Str){  if (n<=0xffffffff)  {    sprintf(Str,"%u",int64to32(n));    return;  }  char NumStr[50];  int Pos=0;  do  {    NumStr[Pos++]=int64to32(n%10)+'0';    n=n/10;  } while (n!=0);  for (int I=0;I<Pos;I++)    Str[I]=NumStr[Pos-I-1];  Str[Pos]=0;}Int64 atoil(char *Str){  Int64 n=0;  while (*Str>='0' && *Str<='9')  {    n=n*10+*Str-'0';    Str++;  }  return(n);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -