C语言的基本类型如下
类型 | 长度(字节) | 值域 | 备注 |
bool | 非零(true), 零(false) | bool类型在低版本的编译器中不存在,使用时需要注意 | |
char | 1 | -128 ~ 127 | 也可以写做 signed char |
unsigned char | 1 | 0 ~ 255 | |
short | 2 | -32768 ~ 32767 | 也可以写做 signed short, short int |
unsigned short | 2 | 0 ~ 65535 | |
int | 4 | -2147483648 ~ 2147483647 | 也可以写做 signed int |
unsigned int | 4 | 0 ~ 4294967295 | |
long | 4 | -2147483648 ~ 2147483647 | 也可以写做 signed int |
unsigned long | 4 | 0 ~ 4294967295 | |
long long | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
unsigned long long | 8 | 0 ~ 18,446,744,073,709,551,615 | |
float | 4 | 1.175494351e-38 ~ 3.402823466e+38 | |
double | 8 | 2.2250738585072014e-308 ~ 1.7976931348623158e+308 |
上述C语言的基本类型相信各位宝子们都很熟悉吧,但是在这里要告诉大家的是,
开发时一定不要直接使用上述类型!!!
开发时一定不要直接使用上述类型!!!
开发时一定不要直接使用上述类型!!!
PS:重要的事情说三遍。
因为C语言是标准,不是产品,不同于Java语言,在使用不同厂商的编译器,编译不同平台的二进制文件时,这些类型的长度是不固定的。很有可能会出现在这个平台运行没问题程序在其他平台运行时由于类型长度发生变化,导致数据溢出,崩溃等各种问题。
如:在32位编译器中,int类型的长度为2字节,long类型的长度为4字节;而在64位编译器中,int类型长度为4字节,long类型长度为8字节。
这种问题怎么解决呢?
很简单使用确定长度的类型就好啦。在不同的编译器工具集中,厂商以及帮我们定义好了一套明确类型长度的类型别名,本质还是上述基本类型,不过字节长度是固定的,即使使用不同的编译得到的结果也是相同的。
其类型如下所示:
类型 | 长度(字节) | 值域 | 备注 |
int8_t | 1 | -128 ~ 127 | typedef signed char; |
uint8_t | 1 | 0 ~ 255 | typedef unsigned char |
int16_t | 2 | -32768 ~ 32767 | typedef signed short int |
uint16_t | 2 | 0 ~ 65535 | typedef unsigned short int |
int32_t | 4 | -2147483648 ~ 2147483647 | typedef signed int 或 typedef signed long int |
uint32_t | 4 | 0 ~ 4294967295 | typedef unsigned int 或 typedef unsigned long int |
int64_t | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | typedef signed long int 或 typedef signed long long int |
uint64_t | 8 | 0 ~ 18,446,744,073,709,551,615 | typedef unsigned long int 或 typedef unsigned long long int |
使用上述类型是需要引入<stdint.h>头文件,该头文件在不同编译器平台中,对于int32_t和int64_t有不同的定义,确保在不同平台中类型长度保持不变。