MFC Template Class CLongInt


Desktop-as-a-Service Designed for Any Cloud ? Nutanix Frame

The template class template <UINT bits, class T = USHORT, class LT = ULONG> class CLongInt<bits> supports long integer arithmetic. Internally, a CLongInt is represented by n digits of the integral type T (specified by the second template parameter). T must be unsigned. The first digit is the most significant digit, the last digit is the least significant digit. The number base of the internal representation of a CLongInt is 2sizeof(T)*CHAR_BIT. For example, if T is an unsigned short, the number base of the CLongInt is 65536. For internal calculations, there must also exist an unsigned integral type LT (specified by the third template parameter) which must have double the size as T. To achieve maximum portability to other C++ compilers, I've chosen unsigned short for T and unsigned long for LT.

The template parameter bits specifies the size of a CLongInt in bits. bits should be at least 64+sizeof(T)*CHAR_BIT. For smaller bit numbers, use any of the built-in simple types int, long, or __int64.

The CLongInt class implements the complete integer arithmetic. There are friend operator functions to mix CLongInt operands with int or long operands. You can easily expand the class CLongInt to mix it with __int64 operands, too.

To prevent the specification of an invalid template parameter for T or LT, the technique of compile-time assertions is applied (see header file StaticCheck.h). This technique is presented by Andrei Alexandrescu in his book Modern C++ Design (see Chapter 2.1).

CLongInt class members:

CLongInt() Constructs an uninitialized CLongInt.
CLongInt(const CLongInt& u) Constructs a CLongInt from another CLongInt u.
CLongInt(int u)
CLongInt(UINT u)
CLongInt(long u)
CLongInt(ULONG u)
Constructs a CLongInt from an integral number u.
CLongInt(LPCTSTR psz, UINT nBase=10) Constructs a CLongInt from the string psz which represents an integral number with the base nBase.
Public member functions:
int Compare(const CLongInt& v) const Returns zero if the CLongInts are identical, <0 if this CLongInt is less than v, or >0 if this CLongInt is greater than v.
CLongInt Divide(CLongInt v, CLongInt* pRem = 0, bool bSigned = true) const Divides this CLongInt by v. The quotient will be returned. The remainder will be stored in *pRem if pRem is unequal zero. If bSigned is false, the division will be performed unsigned.
int ToInt() const
UINT ToUINT() const
long ToLong() const
Converts this CLongInt to an integral quantity of type int, unsigned int, long, or unsigned long.
CString ToString(UINT nBase = 10) const Converts this CLongInt to a string representing the number with base nBase.
Cast operator functions:
Gives access to the internal digit buffer (e.g. for copying directly from memory to a CLongInt or vice versa).
Assignment operator functions:
=, +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ^=
Unary operator functions:
+, -, ++ (pre- and postincrement), -- (pre- and postdecrement), !, ~
Binary operator functions:
+, -, *, /, %, <<, >>, &, |, ^, <, <=, ==, !=, >=, >

About the Author

Thomas Holte

Born in 1953 I'm a passionate programmer since 30 years. I'm employed as a software developer at a large company in Nuremberg, Germany. My hobbies are programming (what else) and digital photography.



  • There are no comments yet. Be the first to comment!

  • You must have javascript enabled in order to post comments.

Leave a Comment
  • Your email address will not be published. All fields are required.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date