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 char
与char
相同。
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_t
、uint8_t
、int16_t
、uint16_t
、int32_t
、uint32_t
、int64_t
、uint64_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
对于-12345有符号整数,在计算机中存储在4个byte中,16进制为0xffffcfc7,8进制为037777747707,如果按照无符号输出则为4294954951。
对于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入)