Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #4636

Re: literals for an int128 class

From Victor Bazarov <v.bazarov@comcast.invalid>
Newsgroups comp.lang.c++
Subject Re: literals for an int128 class
Date 2011-05-03 16:51 -0400
Organization A noiseless patient Spider
Message-ID <ippps8$cfo$1@dont-email.me> (permalink)
References <8ec2c079-9c65-462a-a4b2-af8f2f0422ce@p7g2000yqd.googlegroups.com>

Show all headers | View raw


On 5/3/2011 4:39 PM, cps wrote:
> I am considering writing an int128 class as a programming exercise.
> Before I start (and I have a fair idea of how to do it) I was
> wondering what I can do about literals and the assignment operator.

Judging from the excerpt below, you're talking about the symbol '=' used 
for initialization of objects at the time of their definition, and *NOT* 
about the assignment operator.

 >  I
> would like to be able to use integer literals with the assignment and
> other operators with literals that are sized at 128 bits.
>
> E.g. I'd like to be able to do:
>
>       uint128 myInt128 = 184467440737095516160;

That is called initialization.

>       Note that the foregoing literal would produce an error (correctly
> so) if I attempted to assign it to an uint64 because it is (2^64) *
> 10.
>
>       Is there any way I can set it up to deal with large literals?

Not portably.  Literals are defined by the standard/compiler and unless 
your compiler already provides a 128 bit signed or unsigned integer 
literal, you can't introduce it.  If 'uint128' is totally your own 
custom class, then your best bet is to introduce a constructor from a 
character string (uint128::uint128(const char*)) and surround those 
digits with double quotes:

    uint128 myInt128("184467440737095516160");

*Some* compilers can offer built-in integral types of that size and with 
those they usually offer a way to specify a literal by means of some 
suffix.  For instance, MS used to have i64 suffix before 64 bit targets 
became common:

    int64_t ms64bitInteger = 1234567890i64; // if memory serves

>      Or am I going to have to use strings and parse them?

Most likely.

T
-- 
I do not respond to top-posted replies, please don't ask

Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

literals for an int128 class cps <chrissusie8@gmail.com> - 2011-05-03 13:39 -0700
  Re: literals for an int128 class Victor Bazarov <v.bazarov@comcast.invalid> - 2011-05-03 16:51 -0400
  Re: literals for an int128 class Ian Collins <ian-news@hotmail.com> - 2011-05-04 08:53 +1200
  Re: literals for an int128 class Pete Becker <pete@versatilecoding.com> - 2011-05-03 17:17 -0400
  Re: literals for an int128 class Michael Doubez <michael.doubez@free.fr> - 2011-05-04 01:38 -0700
    Re: literals for an int128 class Ian Collins <ian-news@hotmail.com> - 2011-05-04 21:15 +1200
      Re: literals for an int128 class Michael Doubez <michael.doubez@free.fr> - 2011-05-06 01:03 -0700
        Re: literals for an int128 class Pete Becker <pete@versatilecoding.com> - 2011-05-06 08:00 -0400
          Re: literals for an int128 class Victor Bazarov <v.bazarov@comcast.invalid> - 2011-05-06 09:30 -0400
          Re: literals for an int128 class Michael Doubez <michael.doubez@free.fr> - 2011-05-06 08:00 -0700

csiph-web