uint,uint16,uint32 是typedef
typedef unsigned int uint;
typedef unsigned short uint16;
typedef unsigned long uint32;
说明:
int 的长度取决于平台,16位:2;32位:4;64位:8
short的长度固定为2bytes
long的长度固定为4bytes
int就是一个机器字长()
uint就是一个无符号的int;
uint16就是一个无符号的16位整型;
uint32就是一个无符号的32位整型;
- 问题:sizeof(int)的长度问题:
???到底取决于操作系统还是编译器还是其他???
[root@centos learn-c-cpp]# uname -aLinux centos 4.18.0-240.22.1.el8_3.x86_64 #1 SMP Thu Apr 8 19:01:30 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
[root@centos learn-c-cpp]# ./a.out
sizeof(char) = 1
sizeof(long) = 8
sizeof(int) = 4
sizeof(short)= 2
sizeof(char*)= 8
sizeof(void*)= 8
为什么在64位测试时,sizeof(int)=4
引用(未验证正确性)
在32位程序,指针和数据类型,如整数通常具有相同的长度;这在64位机器上并不一定是这样。 在诸如C及其后代(如C++和Objective-C)的编程语言中混合使用数据类型可能会在32位实现上运行,但不能在64位实现上运行。 在许多用于64位机器的C和C派生语言的编程环境中,“int”变量仍然是32位宽,但长整数和指针是64位宽。 这些被描述为具有LP64数据模型。另一种选择是ILP64数据模型,其中所有三种数据类型都是64位宽,甚至是SILP64,其中“短”整数也是64位宽。然而,在大多数情况下,所需的修改相对较小且直接,并且许多编写良好的程序可以简单地在没有变化的情况下针对新环境重新编译。 另一种选择是LLP64模型,该模型通过将int和long都保留为32位来保持与32位代码的兼容性。 “LL”是指“长整数”类型,在所有平台上至少包括64位,包括32位环境。
Type ILP64 LP64 LLP64
char 8 8 8
short 16 16 16
int 64 32 32
long 64 64 32
long long 64 64 64
pointer 64 64 64