| Topic: |
DEVELOP > c-Plus-Plus |
| User: |
"Jeff Gilchrist" |
| Date: |
17 Jan 2005 12:31:02 PM |
| Object: |
Problems with 64bit integer constant |
I have tried searching the newsgroup along with the GCC site and could
not find what I think is probably a simple solution.
I am using a 64bit unsigned long long integer and can manipulate 64bits
within the variable but I cannot assign a 64bit constant to it.
With my simple test program:
int main()
{
unsigned long long test;
test = 18446744073709551606;
test = 0xFFFFFFFFFFFFFFF6;
}
I get the following errors with gcc v3.3.x and 3.4:
test.cpp:7: warning: this decimal constant is unsigned only in ISO C90
test.cpp:7: error: integer constant is too large for "long" type
test.cpp:8: error: integer constant is too large for "long" type
I have also tried using variations with no success:
test = (unsigned long long)18446744073709551606;
There must be a way to do this, and it is probably just something
simple that I am overlooking. Can anyone help?
Thanks.
.
|
|
| User: "Victor Bazarov" |
|
| Title: Re: Problems with 64bit integer constant |
17 Jan 2005 12:45:55 PM |
|
|
Jeff Gilchrist wrote:
I have tried searching the newsgroup along with the GCC site and could
not find what I think is probably a simple solution.
I am using a 64bit unsigned long long integer and can manipulate 64bits
within the variable but I cannot assign a 64bit constant to it.
With my simple test program:
int main()
{
unsigned long long test;
There is no 'long long' data type in C++. There is in C99. Perhaps you
need to post your question to the C newsgroup (comp.lang.c)?
test = 18446744073709551606;
test = 0xFFFFFFFFFFFFFFF6;
}
I get the following errors with gcc v3.3.x and 3.4:
test.cpp:7: warning: this decimal constant is unsigned only in ISO C90
The constant has a signed type _unless_ it has the U suffix. Try
test = 18446744073709551606U; // for "native" unsigned int
or
test = 18446744073709551606UL; // for "native" unsigned long
The constant is really too big to fit into a signed integer.
test.cpp:7: error: integer constant is too large for "long" type
test.cpp:8: error: integer constant is too large for "long" type
I have also tried using variations with no success:
test = (unsigned long long)18446744073709551606;
There must be a way to do this, and it is probably just something
simple that I am overlooking. Can anyone help?
If your _C++_ compiler natively supports 64-bit numbers, then it would be
under 'unsigned long' type, and not 'unsigned long long'. Otherwise, this
is a wrong forum to ask about it. Try gnu.g++.help.
Victor
.
|
|
|
| User: "Jeff Gilchrist" |
|
| Title: Re: Problems with 64bit integer constant |
17 Jan 2005 01:23:20 PM |
|
|
Victor Bazarov wrote:
There is no 'long long' data type in C++. There is in C99. Perhaps
you need to post your question to the C newsgroup (comp.lang.c)?
You are right of course. I sometimes forget which things are in the C
standard and which are in the C++ since most C++ compilers treat C code
as a substet of C++ and its hard to tell the difference.
For people with 32bit processors, how does one create a 64bit data type
in C++ if 'int' and 'long' are both treated as 32bit in the
compiler(s)?
Thanks,
Jeff.
.
|
|
|
| User: "Victor Bazarov" |
|
| Title: Re: Problems with 64bit integer constant |
17 Jan 2005 01:38:38 PM |
|
|
Jeff Gilchrist wrote:
[..]
For people with 32bit processors, how does one create a 64bit data type
in C++ if 'int' and 'long' are both treated as 32bit in the
compiler(s)?
Usually that's achieved by means of some language extensions. E.g., VC++
has '__int64' and 'unsigned __int64' that can be used. Constants of these
types have non-standard suffixes 'i64' and 'ui64'.
V
.
|
|
|
| User: "Rolf Magnus" |
|
| Title: Re: Problems with 64bit integer constant |
17 Jan 2005 03:17:29 PM |
|
|
Victor Bazarov wrote:
Jeff Gilchrist wrote:
[..]
For people with 32bit processors, how does one create a 64bit data type
in C++ if 'int' and 'long' are both treated as 32bit in the
compiler(s)?
Usually that's achieved by means of some language extensions. E.g., VC++
has '__int64' and 'unsigned __int64' that can be used.
And gcc has 'long long' and 'unsigned long long'.
Constants of these types have non-standard suffixes 'i64' and 'ui64'.
What do you mean by "non-standard suffixes"?
.
|
|
|
| User: "Victor Bazarov" |
|
| Title: Re: Problems with 64bit integer constant |
17 Jan 2005 03:27:07 PM |
|
|
Rolf Magnus wrote:
Victor Bazarov wrote:
Jeff Gilchrist wrote:
[..]
For people with 32bit processors, how does one create a 64bit data type
in C++ if 'int' and 'long' are both treated as 32bit in the
compiler(s)?
Usually that's achieved by means of some language extensions. E.g., VC++
has '__int64' and 'unsigned __int64' that can be used.
And gcc has 'long long' and 'unsigned long long'.
Constants of these types have non-standard suffixes 'i64' and 'ui64'.
What do you mean by "non-standard suffixes"?
AFAIK, there are no standard suffixes 'i64' and 'ui64'. There are 'L',
'U', 'UL', 'F'. And by "constants" I actually meant "literals". My bad.
.
|
|
|
|
|
|
|
|
| User: "John Valko" |
|
| Title: Re: Problems with 64bit integer constant |
17 Jan 2005 12:43:02 PM |
|
|
Jeff Gilchrist wrote:
test = 18446744073709551606;
test = 0xFFFFFFFFFFFFFFF6;
Add the suffix "LLU" to the constants and it should work for you.
-- John
.
|
|
|
| User: "Jeff Gilchrist" |
|
| Title: Re: Problems with 64bit integer constant |
17 Jan 2005 01:24:21 PM |
|
|
John Valko wrote:
Add the suffix "LLU" to the constants and it should work for you.
Thanks John, works like a charm.
Much appreciated,
Jeff.
.
|
|
|
|
|

|
Related Articles |
|
|