Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to specify 64 bit integers in c

Tags:

c

sizeof

64-bit

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....

like image 536
user1245262 Avatar asked Mar 07 '12 17:03

user1245262


People also ask

What is 64-bit integer in C?

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.

How do you write a 64-bit number?

You can use uint64_t type and "%" SCNu64 format specifier for unsigned 64-bit integer.

Does C support 64-bit?

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.


1 Answers

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; 
like image 191
Paul R Avatar answered Oct 01 '22 03:10

Paul R