3.1 数据类型关键字
位:计算机内部数据存储的最小存储单位(bit)。
字节:计算机中数据处理的基本单位(Byte)),1B=8bit。
字:计算机进行数据处理时,一次存取,加工和传送的数据长度。(word)。
3.1.1 不同数据类型的表示方法
在printf()中显示
十进制 | 二进制 | 八进制 | |
显示数字 | %d | %o | %ox |
显示前缀 | %#o | %#x()改成X就显示X |
数据类型 | 转换说明 |
char | %c |
short | %hd |
unsigned short | %hu |
int | %d |
unsigned int | %u |
long | %l |
unsigned long | %lu |
long long | %ll |
unsigned long long | %llu |
关于printf(),该语句先将输出发送到一个叫缓冲区的中间储存区域,当储存区满,或遇到换行字符或需要输入时发送输出到屏幕(从缓冲区把数据发送到屏幕或文件的被称为刷新缓冲区)
3.2 char类型
ASCLL码
转义序列
3.3 可移植类型:stdio.h和inttypes.h
例
int32_t:表示有符号的整数类型。为精确宽度整数类型示例。
int_least8_t:表示可容纳8位有符号整数值的类型中宽度最小的类型的一个别名。
最小宽度类型:保证所表示的类型一定是至少有指定宽度的最小整数类型。
int_fast8_t:系统中对8位有符号值而言最快的整数类型别名。
最快最小宽度类型:使计算达到最快的类型集合。
intmax_t:最大有符号整数类型。
3.3 浮点数
float:必须至少能表示6位有效数字,且取值范围至少是10-37~10+37。
double:必须至少能表示10位有效数字,编译器假定浮点型常量为double。
打印方法:
%f表示打印10进制计数法的folat类型。(一定要用%lf表示double类型)
%e表示打印指数计数法的falat和double
打印long float或long double要用%lf转换说明。
3.4 复数和虚数类型
虚数是可选类型。复数的实部和虚部都是基于浮点类型来构成。
float _complex
double _complex
long double _complex
float _Imaginary
double _Imaginary
long double _Imaginary
3.5 类型大小
利用sizeof()来查询各数据类型的大小,一定要避免数据出现上溢和下溢。
C99和C11利用%zd来转换说明sizeof的返回类型。
不支持C99和C11的可用%u或%lu。
利用float.h头文件
DBL_MAX double最大值
DBL_MIN double最小值
FLT_MAX float 最大值
FLT_MIN float 最小值
3.6 编程练习
1.整数上溢即由最大值变为最小值,下溢即由最小值变为最大值。
浮点数上溢下溢如下图。
#include <stdio.h> #include <float.h> int main(void) { double max=DBL_MAX; double min=DBL_MIN; printf("最大值为%e ",max); printf("最大值上溢%e ",max*2); printf("最小值为%e ",min); printf("最小值下溢%e ",min/2); return 0; }
2.输入ASCLL码对应的数值,打印出对应的字符。
#include <stdio.h> #include <float.h> int main(void) { char num=0; printf("Plese enter the value of ASCLL___"); scanf("%d",&num); printf("The value you input corresponds to ASCLL of %c",num); return 0; }
4.键入一个浮点数,分别以小数点形式,指数形式,p计数法形式显示。
#include <stdio.h> #include <float.h> int main(void) { float num=0; printf("Plese enter a float___"); scanf("%f",&num); printf("小数点形式%f,指数形式%e,p计数法式%a",num,num,num); return 0; }
5.年龄换算为秒
#include <stdio.h> int main(void) { long double age=0; long double second=0; printf("Plese enter your age___"); scanf("%lf",&age); second=age*3.156e7; printf("second is %e",second); return 0; }
6.将输入的夸脱数转化为相应的水分子数量。
#include <stdio.h> int main(void) { double quart1=0; double num1=0; printf("Plese enter quart___"); scanf("%lf",&quart1); printf("%e ",quart1); num1=(quart1*950)/(3.0*1e-23); printf("number of water molecules is %e ",num1); }
8.
因为以杯作为基准,则会出现整数不够用的情况。