C 数据类型

    C语言中数据类型用于申明变量或函数。类型是对数据分配存储单元的安排,包括存储单元的长度(占有字节)以及数据的存储形式。

    C语言中数据类型分为以下几种:

   

类型 描述
基本类型 属于算术类型,包括整数类型和浮点类型
枚举类型(enum) 属于算术类型,程序中用户定义的整数类型
空类型(void) 表示没有值可用
派生类型 包括:指针类型、数组类型、结构体类型、共用体类型、函数类型
其中,算术类型(arithmetic type)和指针类型统称为纯量类型(scalar type),数组类型和结构体类型统称为组合类型(aggregate type),函数类型用于定义函数的返回值和参数的类型。


1.整数类型

 以下是在64位系统下整数类型的详情:

类型 存储大小 值范围 描述
(signed) char(有符号字符型) 1byte -128~127 有符号8位整数
  unsigned char (无符号字符型) 1byte 0~255 无符号8位整数
(signed)short(有符号短整型) 2byte -32768~32767 有符号16位整数
  unsigned short(无符号短整型) 2byte 0~65535 无符号16位整数
(signed)int(有符号基本整形) 4byte -2147483648~2147483647 有符号32位整数
  unsigned int(无符号基本整型) 4byte 0~4294967295 无符号32位整数
(signed)long long int(有符号双长整型) 8byte -9223372036854775808~9223372036854775807 有符号64位整数
  unsigned long long int (无符号双长整型) 8byte 0~18446744073709551615 无符号64位整数
  _Bool(布尔型) 1byte 1(true),0(false) 8位整数

在stdint.h和stdbool.h中对精确宽度整数类型及其大小限制有下列定义:

typedef signed char int8_t;
typedef unsigned char uint8_t;
typedef short int16_t;
typedef unsigned short uint16_t;
typedef int int32_t;
typedef unsigned uint32_t;
typedef long long int64_t;
typedef unsigned long long uint64_t;
typedef bool _Bool
typedef true 1
typedef false 0


#define INT8_MIN (-128)
#define INT16_MIN (-32768)
#define INT32_MIN (-3247483647 - 1)
#define INT64_MIN (-9223372036854775807LL - 1)

#define INT8_MAX 127
#define INT16_MAX 32767
#define INT32_MAX 2147483647
#define INT64_MAX 9223372036854775807LL

#define UINT8_MAX 0xff /*255U*/
#define UINT16_MAX 0xffff /*65535*/
#define UINT32_MAX 0xffffffff /*4294967295U*/
#define UINT64_MAX 0xffffffffffffffff /*18446744073709551615ULL*/

2.浮点类型

浮点类型详情:

类型 字节数 取值范围(绝对值) 有效位数
float 4 1.175494e-38~3.402823e+38 6
double 8 2.225074e-308~1.797693e+308 15
long double 16 3.362103e-4932~1.189731e+4932 18
这些信息在头文件float.h中均作出了定义。给出获取类型字节数、取值范围(绝对值)、有效位数:

int main(int arg,char* argv[]){
    printf("单精度浮点型存储字节大小:%lu\n",sizeof(float));
    printf("单精度浮点型取值范围(绝对值):%e~%e\n",FLT_MIN,FLT_MAX);
    printf("单精度浮点型有效位数:%d\n",FLT_DIG);
   
    printf("双精度浮点型存储字节大小:%lu\n",sizeof(double));
    printf("双精度浮点型取值范围(绝对值):%e~%e\n",DBL_MIN,DBL_MAX);
    printf("双精度浮点型有效位数:%d\n",DBL_DIG);
    
    printf("长双精度型存储字节大小:%lu\n",sizeof(long double));
    printf("长双精度型取值范围(绝对值):%Le~%Le\n",LDBL_MIN,LDBL_MAX);
    printf("长双精度型有效位数:%d\n",LDBL_DIG);
    return 0;
}
运行结果:

单精度浮点型存储字节大小:4
单精度浮点型取值范围(绝对值):1.175494e-38~3.402823e+38
单精度浮点型有效位数:6
双精度浮点型存储字节大小:8
双精度浮点型取值范围(绝对值):2.225074e-308~1.797693e+308
双精度浮点型有效位数:15
长双精度型存储字节大小:16
长双精度型取值范围(绝对值):3.362103e-4932~1.189731e+4932
长双精度型有效位数:18

C99中提供了复数支持,用两个两同的浮点类型分别表示复数的实部和虚部,例:float _Complex  = float +float*i.并可以分别通过creal(float _Complex)和cimag(float _Complex)函数获取该复数的实部和虚部。具体定义于头文件complex.h中。

    printf("单精度浮点型复数字节大小:%lu\n",sizeof(float _Complex));
    printf("双精度浮点型复数字节大小:%lu\n",sizeof(double _Complex));
    printf("长双精度型复数字节大小:%lu\n",sizeof(long double _Complex));

运行结果:

单精度浮点型复数字节大小:8
双精度浮点型复数字节大小:16
长双精度型复数字节大小:32

3.枚举类型

所谓枚举是指将变量的值一一列举出来,变量指限于列举出来的值的范围内取值。

 enum Color{
        RED,
        BLUE,
        BLACK = 5,
        YELLEW
    };
    
    enum Color red = RED;
    printf("red = %d\n",red);
    
    enum Color blue = BLUE;
    printf("blue = %d\n",blue);
    
    enum Color black = BLACK;
    printf("black = %d\n",black);
    
    enum Color yellew = YELLEW;
    printf("yellew = %d\n",yellew);

运行结果:

red = 0
blue = 1
black = 5
yellew = 6

4.空类型

void类型指没有可用值,一般出现于下列三种情况:

类型  
函数返回为空 不返回值的函数的返回类型为空,例如:void exit()
函数参数为空 不带参数的函数,可以接收一个void,例如:int rand(void)
指针指向为空 类型为void的指针代表对象的地址,而非类型。例如:void malloc(size_t size);返回指向void的指针,可以转换为任何数据类型。





你可能感兴趣的:(C 数据类型)