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

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         //长双精度浮点型,16个字节

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

sizeof(type)运算符可以得到不同数据类型的所占字节空间大小。

printf("char size: %d \n", sizeof(char));
printf("short size: %d \n", sizeof(short));
printf("int size: %d \n", sizeof(int));
printf("long size: %d \n", sizeof(long));
printf("long long size: %d \n", sizeof(long long));
printf("float size: %d \n", sizeof(float));
printf("double size: %d \n", sizeof(double));
printf("long double size: %d \n", sizeof(long double));

输出结果:
输出结果

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进制表示
%hd  //格式化输出一个短整数(有符号)
%ld  //格式化输出一个长整数(有符号)
%lld //格式化输出一个超长整数(有符号)
 
%f   //格式化输出一个浮点数
%e   //格式化输出一个浮点数,以科学计数法表示

接下来使用printf()函数用于格式化输出。

1、字符格式化输出示例

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);

输出结果:
字符输出结果

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
  1. 对于-12345有符号整数,在计算机中存储在4个byte中,16进制为0xffffcfc7,8进制为037777747707,如果按照无符号输出则为4294954951。

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

3、浮点数格式化输出示例

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入)

posted @ 2023-12-05 17:31  HAOstudio  阅读(757)  评论(0编辑  收藏  举报