aboutsummaryrefslogtreecommitdiffstats
path: root/docs/source/arduino/long.rst
blob: 6d20111a6f2ded0a80bd66ecc7663fc2a4a716d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
.. highlight:: cpp

.. _arduino-long:

long
====

Description
-----------

The ``long`` data type stores extended size integer values.  You can
use a ``long`` when your values are too large to fit into an :ref:`int
<arduino-int>`.  A ``long`` occupies 8 bytes of memory.  This yields a
range of approximately -9.2×10^18 to 9.2×10^18 (that's 9.2 billion
billion, or about 92 million times the number of stars in the Milky
Way galaxy).  The exact range of a ``long`` on the Maple is from
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807, or -2^63 to
(2^63-1).

Here's an example of declaring a long (see :ref:`integer constants
<arduino-constants-u-l>` for explanation of the 'L')::

        // Speed of light in nanometers per second (approximate).
        long c = 299792458000000000L;

The general syntax for declaring an ``long`` variable named ``var``,
then giving it value ``val``, looks like::

    long var = val;

This is identical to the ``int`` syntax, with ``long`` replacing
``int``.

Note that ``long`` values will still :ref:`overflow
<arduino-int-overflow>`, just like ``int`` values, but their much
larger range makes this less likely to happen.

The downside to using a ``long`` instead of an ``int`` (besides the
extra storage) is that :ref:`arithmetic <arduino-arithmetic>`
operations on ``long``\ s will take longer than on ``int``\ s.

See Also
--------

-  :ref:`char <arduino-char>`
-  :ref:`unsigned char <arduino-unsignedchar>`
-  :ref:`int <arduino-int>`
-  :ref:`unsigned int <arduino-unsignedint>`
-  :ref:`unsigned long <arduino-unsignedlong>`
-  :ref:`Integer Constants <arduino-constants-integers>`
-  :ref:`Variables <arduino-variables>`