C语言中的基本数据类型及其格式化输出

发布时间 2023-12-05 17:33:25作者: HAOstudio

C语言中的基本数据类型及其格式化输出

基本数据类型

从下图可以看出,C语言中的基本数据类型包括了整型(int)、字符型(char)、浮点型(float)和双精度浮点型(double)

基本数据类型

在声明变量时,不同数据类型都会分配不同的存储空间,而且还跟操作系统有关。

所占存储空间

char                //有符号字符型,1个字节
unsigned char       //无符号字符型,1个字节

short               //有符号短整型,2个字节
unsigned short      //无符号短整型,2个字节

int                 //有符号整型,4个字节
unsigned int        //无符号整型,4个字节

long                //有符号长整型,4个字节
unsigned long       //无符号长整型,4个字节

long long           //有符号超长整型,8个字节
unsigned long long  //无符号超长整型,8个字节

float               //单精度浮点型,4个字节
double              //双精度浮点型,8个字节
long double         //长双精度浮点型,8个字节

不带unsigned的数据类型默认为有符号型,等同于在前面加了一个signed,即signed charchar相同。

sizeof(type)运算符可以得到不同数据类型的所占字节空间大小。例如:sizeof(char)为1,sizeof(short)为2。

stdint.h标准头文件中,可以看到下面的代码,将不同的数据类型起了一个别名,分别有int8_tuint8_tint16_tuint16_tint32_tuint32_tint64_tuint64_t
而且定义了不同数据类型的最大值和最小值。

/* 7.18.1.1  Exact-width integer types */
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;
__MINGW_EXTENSION typedef long long  int64_t;
__MINGW_EXTENSION typedef unsigned long long   uint64_t;
...
/* 7.18.2.1  Limits of exact-width integer types */
#define INT8_MIN (-128)
#define INT16_MIN (-32768)
#define INT32_MIN (-2147483647 - 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 255
#define UINT16_MAX 65535
#define UINT32_MAX 0xffffffffU  /* 4294967295U */
#define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */

格式化输出

格式化输出符以百分号%加上字母组成,基本格式有以下几种:

%c   //格式化输出一个字符
%s   //格式化输出一个字符串,传入字符指针,输出到\0结束

%d   //格式化输出一个整数(有符号)
%u   //格式化输出一个整数(无符号)
%o   //格式化输出一个整数(无符号),以8进制表示
%x   //格式化输出一个整数(无符号),以16进制表示
%ld  //格式化输出一个长整数(有符号)
%lld //格式化输出一个超长整数(有符号)
 
%f   //格式化输出一个浮点数
%e   //格式化输出一个浮点数,以科学计数法表示

printf函数可以用于格式化输出,字符格式化输出示例:

char  mstr1[] = "abcde";
printf("mstr1:%s \n", mstr1);
printf("mstr1:%c %c %c %c %c \n", mstr1[0], mstr1[1], mstr1[2], mstr1[3], mstr1[4]);
printf("mstr1_:%s \n", mstr1+2);

输出结果:
字符输出结果

整数格式化输出示例:

printf("%d \n",  12345  );  //输出:12345
printf("%d \n",  -12345 );  //输出:-12345
printf("%d \n",  -12345u);  //输出:-12345

printf("%u \n",  12345  );  //输出:12345
printf("%u \n",  -12345 );  //输出:4294954951

printf("%x \n",  12345  );  //输出:3039
printf("%x \n",  -12345 );  //输出:ffffcfc7

printf("%o \n",  12345  );  //输出:30071
printf("%o \n",  -12345 );  //输出:37777747707

printf("%lld \n", 1234567ll ); //输出:1234567
printf("%lld \n", -1234567ll); //输出:-1234567
printf("%lld \n", -1234567  ); //输出:4293732729
  1. 对于-12345有符号整数,在计算机中存储在4个byte中,16进制为0xffffcfc7,8进制为037777747707,如果按照无符号输出则为4294954951。

  2. 对于12345有符号整数,在计算机中存储在4个byte中,16进制为0x3039,8进制为030071,如果按照无符号输出还是12345。

  3. 对于-1234567有符号整数,在计算机中存储在4个byte中,16进制为0xFFED2979,按照超长整形输出,高位补零,为0x00000000FFED2979,十进制为4293732729。

浮点数格式化输出示例:

printf("%f \n", 3.1415926  );   //输出:3.141593
printf("%e \n", 31415.926  );   //输出:3.141593e+004
printf("%.7f \n", 3.1415926);   //输出:3.1415926
printf("%.3f \n", 314.15926);   //输出:314.159

%f默认输出保留6位小数,也可以自定义小数位数,%.3f为定义输出小数位后3位。(舍去的部分4舍5入)