我试图在C语言中使用64位整数,但对于是否可能,我得到了混合信号.

当我执行printf时:

printf("Size of long int:%d\nSize of long long int:%d\n\n",(int)sizeof(long int), (int)sizeof(long long int));

我得到的回应是:

长整型的大小:4 LONG LONG INT的大小:8

这让我觉得长整型有8字节=64位.

但是,当我try 声明以下变量时:

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;

最后4个变量(f2、g2、h2、i2)给出了错误消息:

警告:整数常量对于"long"类型太大

当我将‘long long int’替换为‘int64_t’时得到相同的结果.我假设‘int64_t’被识别,因为它本身没有生成任何错误消息.

看起来我的8字节长的int实际上是一个6字节长的int,我不明白我缺少了什么.如果有任何帮助,以下是我的gcc编译器的信息:

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)   

如果有人知道我如何(或是否)访问64位整数,我将不胜感激.谢谢...

推荐答案

整数数据类型的特定大小使用stdint.h,整数文本常量也使用适当的后缀,例如:

#include <stdint.h>

int64_t i2 = 0x0000444400004444LL;

C++相关问答推荐

奇怪的print在getchar和getchar跳过后不工作

MISIX标准和信号量的语义

如何在C中的空指针函数中传递浮点值

从C函数调用asm函数时生成错误的BLX指令(STM32H753上的gcc)

是否定义了数组指针类型转换为指针类型?""""

编译SDL 2时缺少SDL_ttf

如何跨平台处理UTF-16字符串?

为什么GCC在每次循环迭代时都会生成一个数组的mov&S使用[]访问数组?(-03,x86)

在一个小型玩具项目中实现终端历史记录功能

在Apple Silicon上编译x86的Fortran/C程序

正数之和是负数

Wcstok导致分段故障

C23标准是否向后兼容?

使用mmap为N整数分配内存

如何编写postgresql支持函数

函数的typedef是标准 C 语法吗?它与函数指针的typedef有何不同?

Struct 内的数组赋值

System V 消息队列由于某种原因定期重置

可以从指针数组中的值初始化指针吗?

malloc:损坏的顶部大小无法找出问题