I'm trying to use 64 bit integers in C, but am getting mixed signals as to whether it should be possible.
When I execute the printf:
printf("Size of long int:%d\nSize of long long int:%d\n\n",(int)sizeof(long int), (int)sizeof(long long int));
The response I get is:
Size of long int:4 Size of long long int:8
This makes me feel that a long long int has 8 bytes = 64 bits.
However, when I try to declare the following variables:
long long int a2 = 0x00004444; long long int b2 = 0x000044440; long long int c2 = 0x0000444400; long long int d2 = 0x00004444000; long long int e2 = 0x000044440000; long long int f2 = 0x0000444400004; long long int g2 = 0x00004444000044; long long int h2 = 0x000044440000444; long long int i2 = 0x0000444400004444;
The last 4 variables (f2,g2,h2,i2) give me the error message:
warning: integer constant is too large for ‘long’ type
I get the same result when I replace 'long long int' with 'int64_t'. I assume 'int64_t' was recognized, since it didn't generate any error messages of its own.
So, it appears my 8 byte long long int is really a 6 byte long long int, and I don't understand what I'm missing here. If it's any help, here is the information on my gcc compiler:
me@ubuntu:~$ gcc -v Using built-in specs. Target: i686-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.4-14ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --with-sysroot=/ - -enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu Thread model: posix gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
If anyone knows how (or if) 64 bit integers are accessible to me, I'd really appreciate any help. Thanks....
The long long data type makes handling 64 bit integers easy. In C language, an unsigned number over 32 bits cannot exceed the value of 4,294,967,295. You may find you are required to handle larger numbers and for this you need these numbers to be coded in 64-bit.
You can use uint64_t type and "%" SCNu64 format specifier for unsigned 64-bit integer.
Microsoft C/C++ features support for sized integer types. You can declare 8-, 16-, 32-, or 64-bit integer variables by using the __intN type specifier, where N is 8, 16, 32, or 64.
Use stdint.h
for specific sizes of integer data types, and also use appropriate suffixes for integer literal constants, e.g.:
#include <stdint.h> int64_t i2 = 0x0000444400004444LL;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With