C语言-06-数据类型 📅 发布时间:2026/8/19 17:08:50 👁 浏览次数: 目录6.1 整数类型6.2 浮点类型6.3 字符类型6.4 布尔类型6.5 获取数据存储的大小6.6 数据类型转换1自动类型转换隐式转换2赋值时的自动类型转换3强制类型转换显示转换C语言根据数据的特性和用途进行了类型划分不同类型的数据在内存中占据不同大小的空间。6.1 整数类型1基本介绍整数类型简称整型就是用于存放整数值的比如12303456等。2整数的类型关于存储大小单位 bit位计算机中的最小存储单位表示一个二进制位。 byte字节计算机中基本存储单元1byte 8bit。3整型注意事项各类型存储大小受到操作系统、编译器、硬件平台的影响。整型分为有符号signed和无符号unsigned两种默认是signed。开发中使用整型一般用int型如果不足以表示大数可以使用long long4字面量后缀字面量是源代码中一个固定值的表示法用于直接表示数据如图所示一个整数字面量默认是int类型。如果需要表示 long 类型字面量需要添加后缀 l 或 L。如果需要表示 long long 类型字面量需要添加后缀 ll 或 LL。如果需要表示无符号整数字面量需要添加后缀 u 或 U 注意 u 和 l 可以结合使用不分先后如 ul无符号long类型、ULL无符号 long long类型lu无符号 long 类型 等。5格式占位符%d 对应 int 类型%u 对应 unsigned int 类型。%ld 对应 long 类型%lu 对应 unsigned long 类型。%lld 对应 long long 类型%llu 对应 unsigned long long 类型。6代码演示#includestdio.hintmain(){//short 类型shorta110;// 等同于 signed short a1 10;shorta2-10;// 等同于 signed short a1 -10;// unsigned short a3 -20; 无符号类型不能存储负数unsignedshorta320;printf(a1%d, a2%d, a3%d \n,a1,a2,a3);// int 类型intb1100;// 等同于 signed int a1 100;intb2-100;// 等同于 signed int a1 -100;unsignedintb3200u;unsignedb4300U;// 等同于 unsigned int b4 300U;printf(b1%d; b2%d; b3%d; b4%d \n,b1,b2,b3,b4);// b1100; b2-100; b3200; b4300// long 类型longc11000l;// 等同于 signed long c1 1000l;longc2-1000L;// 等同于 signed long c2 -1000L;unsignedlongc32000ul;printf(c1%ld; c2%ld; c3%ld \n,c1,c2,c3);// c1100; c2-1000; c32000// long long 类型longlongd110000ll;// 等同于 signed long long d1 10000ll;longlongd2-10000LL;// 等同于 signed long long d2 -10000LL;unsignedlonglongd320000ULL;printf(d1%lld; d2%lld; d3%lld \n,d1,d2,d3);// d110000; d2-10000; d320000return0;}6.2 浮点类型1基本介绍浮点类型可以表示一个小数比如123.47.80.12等。2浮点型的类型3浮点型注意事项各类型的存储大小和精度受到操作系统、编译器、硬件平台的影响。浮点型数据有两种表示形式十进制数形式如5.12、512.0f、.5120.512 可以省略 0科学计数法形式如5.12e2、5.12E-2开发中用到浮点型数字建议使用double型如精度要求更高可以使用long double 型。4字面量后缀浮点数字面量默认是double型如果需要表示float类型字面量须加后缀 f 或 F。如果需要表示long double类型字面量需加后缀 l 或 L5格式占位符在C语言中占位符是一种用于格式化输出的特殊字符通常用于 printf() 等输出函数中用于指定输出的格式和内容。%f是浮点类型的格式占位符在printf中对应double类型float类型会转换成double来处理默认会保留6位小数可以指定小数位数如%.2f表示保留2位小数。%lf在printf中和%f意思相同C99标准加入也对应double类型默认保留6位小数可以指定小数位数如%.2lf表示保留2位小数。但需要注意的是在scanf中 %lf和 %f含义不同输入一个float类型数据时使用%f而输入double类型时必须使用 %lf。%Lf 对应的是long double类型默认保留6位小数可以指定小数位数如 %.2Lf 表示保留2位小数。需要注意的是输入输出 long double类型都必须使用 %Lf 占位符。%e 对应科学计数法表示的浮点数可以指定尾数部分所保留的小数位数如 %.2e表示尾数部分保留两位小数。#includestdio.hintmain(){//double 类型doublea13.1415;doublea2.12345678;doublea3-2e12;doublea41.9823e2;printf(a1%f, a2%.10f, a3%.2lf, a4%lf \n,a1,a2,a3,a4);printf(a1%e, a2%.2e, a3%e, a4%e \n,a1,a2,a3,a4);// float 类型floatb13.1415f;floatb2.123456f;floatb3-2e12f;floatb41.9823e2f;printf(b1%f, b2%f, b3%.0f, b4%f \n,b1,b2,b3,b4);printf(b1%e, b2%.2e, b3%e, b4%e \n\n,b1,b2,b3,b4);return0;}6.3 字符类型1基本介绍字符类型 char 可以表示单个字符如一个数字、一个字母、一个符号。2注意事项char类型的字面量是用单引号括起来的单个字符。可以使用转义字符 \ 表示特殊含义的字符。多个字符称为字符串在C语言中使用char数组表示数组不是基本数据类型而是构造类型3格式占位符使用%c表示char类型。4字符类型本质1C语言中char类型本质是一个整数是ASCII码中对应的数字存储长度是 1 个字节char类型也可以进行数学运算。2字符型同样分为signed char无符号和unsigned char有符号其中signed char取值范围-128 ~ 127unsigned char取值范围0 ~ 255。默认是否带符号取决于当前运行环境。3字符型数据在计算中存储和读取的过程5ASCII 码介绍ASCIIAmerican Standard Code for Information Interchange码是一种用于表示文本字符的字符编码标准一共规定了128个字符的编码比如空格“SPACE” 是32二进制00100000大写的字母A是65二进制01000001。6代码演示#includestdio.hintmain(){// char 类型字面量需要使用单引号包裹chara1A;chara29;chara3\t;printf(c1%c, c3%c, c2%c \n,a1,a3,a2);// char 类型本质上整数可以进行运算charb1b;charb2101;printf(%c-%d \n,b1,b1);printf(%c-%d \n,b2,b2);printf(%c%c%d \n,b1,b2,b1b2);// char 类型取值范围unsignedcharc1200;// 无符号char取值范围 0 ~255signedcharc2200;// 有符号char取值范围 -128~127c2会超出范围charc3200;// 当前系统char 默认是 signed charprintf(c1%d, c2%d, c3%d,c1,c2,c3);return0;}6.4 布尔类型1基本介绍布尔值用于表示真、假两种状态通常用于逻辑运算和条件判断。2声明布尔类型的方式C99标准提供了一个头文件 stdbool.h 定义了bool代表_Booltrue代表1false代表0。#includestdio.h#includestdbool.hintmain(){bool isPassfalse;bool isOktrue;printf(isPass%d, isOk%d \n,isPass,isOk);if(isPass){printf(Pass);}if(isOk){printf(Ok);}return0;}6.5 获取数据存储的大小使用sizeof 可以获取数据类型或变量、字面量的存储大小单位是字节。sizeof返回一个size_t类型的无符号整数值格式占位符是%zu#includestdio.hintmain(){//计算数据类型的大小必须使用括号将数据类型关键字包裹起来printf(char: %zu \n,sizeof(char));//char: 1printf(short: %zu \n,sizeof(short));//short: 2printf(int: %zu \n,sizeof(int));//int: 4printf(long: %zu \n,sizeof(long));//long: 4printf(long long: %zu \n,sizeof(longlong));//long long: 8printf(float: %zu \n,sizeof(float));//float: 4printf(double: %zu \n,sizeof(double));//double: 8printf(long double: %zu \n,sizeof(longdouble));//long double: 16printf(\n);//计算字面量数据的大小字面量可以省略括号printf(%zu \n,sizeof(a));//4printf(%zu \n,sizeof(431));//4printf(%zu \n,sizeof4.31);//8printf(\n);//计算变量的大小变量可以省略括号charaA;intb90;longlongc100;doubled10.8;printf(a: %zu \n,sizeof(a));//a: 1printf(b: %zu \n,sizeofb);//b: 4printf(c: %zu \n,sizeof(c));//c: 8printf(d: %zu \n,sizeofd);//d: 8return0;}6.6 数据类型转换1自动类型转换隐式转换不同类型的数据进行混合运算会发生数据类型转换窄类型会自动转为宽类型这样不会造成精度损失。1转换规则不同类型整数进行运算窄类型整数自动转换为宽类型整数。不同类型浮点数进行运算精度小的类型自动转换为精度大的类型。整数与浮点数进行运算整数自动转换为浮点数2转换方向#includestdio.hintmain(){// 整型提升shorts110;intn140000;//运算过程中变量s1是short类型会自动转为int类型printf(%d \n,s1n1);//有符号整数自动转为无符号整数//int n2100;intn2-100;unsignedintn320;//负数转为无符号整数两者绝对值的和是无符号整的最大值再加1printf(%u \n,n2n3);//不同类型的浮点数运算精度低的转换精度高的floatf11.25f;doubled24.58667435;printf(%f \t,f1);printf(%.10f \n,f1d2);//整型与浮点型运算整型转为浮点型intn410;doubled31.67;printf(%f,n4d3);return0;}2赋值时的自动类型转换在赋值运算中赋值号两边量的数据类型不同时等号右边的类型将转换为左边的类型。 如果窄类型赋值给宽类型不会造成精度损失如果宽类型赋值给窄类型会造成精度损失。#includestdio.hintmain(){//赋值 窄类型赋值给宽类型inta110;doublea2a1;printf(%f \n,a2);//赋值 宽类型赋值给窄类型doubleb11.2;intb2b1;printf(%d \n,b2);return0;}3强制类型转换显示转换转换格式类型名变量、常量或者表达式#includestdio.hintmain(){doubled11.934;doubled24.2;intnum1(int)d1(int)d2;intnum2(int)(d1d2);intnum3(int)(3.5*106*1.5);printf(num1%d \n,num1);printf(num2%d \n,num2);printf(num3%d \n,num3);return0;}