一、C语言数据类型
C语言标准是这样规定的:
int最少16位(2字节),long不能比int短,short不能比int长,具体位长由编译器开发商根据各种情况自己决定。
在32位x86处理器上,short、int、long普遍的长度是2字节、4字节、4字节。当然如果编译器开发商愿意,long完全可以是8字节。
在 win64 下,long 也是 32 bit 的,4 字节。int则是64bit,8字节!
signed
表示有符号,unsigned
表示无符号。
数据类型 | 占用空间 | 范围 |
---|---|---|
char | 1字节 | -128 ~ +127 |
short | 2字节 | -32768 ~ + 32767 |
unsigned short | 2字符 | 0 ~ 65536 |
int | 4字节 | -2147483648 ~ +2147483647 |
unsigned int | 4字节 | 0 ~ 4294967295 |
long | 2位机器:4字节 64位机器:8字节 | -2147483648 ~ +2147483647 -9223372036854775808 ~ +9223372036854775807 |
long long | 8字节 | -9223372036854775808 ~ +9223372036854775807 |
float | 4字节 | |
double | 8字节 | |
指针 | 32位机器:4字节 64位机器:8字节 |
二、C中int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t区别
int8_t、int16_t、int32_t、int64_t、uint8_t
类型 | 定义 | 是否有符号 | 位 | 字节 | 最小值 | 最大值 |
---|---|---|---|---|---|---|
int8_t | signed char | Signed | 8 | 1 | -128 | 127 |
uint8_t | unsigned char | Unsigned | 8 | 1 | 0 | 255 |
int16_t | short | Signed | 16 | 2 | -32,768 | 32,767 |
uint16_t | unsigned short | Unsigned | 16 | 2 | 0 | 65,535 |
int32_t | int | Signed | 32 | 4 | -2,147,483,648 | 2,147,483,647 |
uint32_t | unsigned int | Unsigned | 32 | 4 | 0 | 4,294,967,295 |
int64_t | long long | Signed | 64 | 8 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
uint64_t | unsigned long long | Unsigned | 64 | 8 | 0 | 18,446,744,073,709,551,615 |
size_t与ssize_t
size_t主要用于计数,如sizeof函数返回值类型即为size_t。在不同位的机器中所占的位数也不同,size_t是无符号数,ssize_t是有符号数。
在32位机器中定义为:typedef unsigned int size_t; (4个字节)
在64位机器中定义为:typedef unsigned long size_t;(8个字节)