《C primer plus》第三章知识点

前文链接:《C primer plus》第一章~第二章知识点_toki不听话的博客-CSDN博客

第3章:数据和C

1: float类型是浮点类型,可以处理更大范围的数据,可以处理含有小数的数字。要打印浮点类型,用%f说明符来处理浮点值。

对%f使用.2修饰词可以精确控制输出格式,使浮点数显示到小数点后两位。语法:%.2f。

2:scanf()函数是stdio.h头文件的函数,该函数为程序提供键盘输入。scanf(“%f”,&num); 其中%f 指示从键盘读取一个浮点数,&num指定将输入值赋予num变量中。 &符号指示变量的位置。

3:常量和变量的区别在于,变量的值可以在程序执行过程中变化和指定,而常量不可以。

4:数据类型相关的关键字:

int(整型) long(长型) short(短型) unsigned(无符号型)

char(字符型) float(单浮点型) double(双浮点型)

signed(有符号型) void(空)  _Bool(布尔型)

_Complex(复数类型)   _Imaginary(虚数型)

5:int类型是基本整数类型,long short unsigned 和signed用于提供基本类型的变种。long int 代表长整型。

6: char字符型用于表示字母或者其他符号。Char类型也可以表示小的整数。

7: float、double代表有小数点的数。

8:_Bool类型代表布尔值(true和false),C中,true=1,false=0。

9:_Complex(复数类型)   _Imaginary(虚数型) 分别表示复数和虚数。

10:这些类型在计算机存储分为两类,整数类型和浮点数类型。

11:字(word)是自然的存储单位,其大小依据CPU的位数,一次性传输数据的能力,16位CPU,其字的长度是16位。

12:浮点数的计数表示法: 3.16E7 = 3.16* 10^7。

13:浮点数可以表示比整数大的多的数字。

14:对于一些浮点运算(例如减法),使用浮点数会损失更多精度。

15:浮点运算比整数运算慢。

16:int类型取值范围依赖于计算机系统。一般的,int类型存储在计算机的一个字中。C委员会规定默认存储不低于16位。即2^16位,65536大小。int默认是signed的,所以取值范围是-32768~32767。

17:变量的初始化方法:

第一种: int a = 5;

第二种:  int a = 5, b =4;    //逗号表示分隔。

18:使用printf()函数时,格式说明符的数目和要显示的值的数目一定要相同。

19:C中,前缀0X或者0x表示使用16进制,前缀0代表8进制。

20:%O(字母0) 格式说明符显示8进制,%x格式说明符显示16进制。

%#o显示0前缀,%#x显示0x前缀,%#0X显示0X前缀。

21:long long类型为64位,long类型为32位,short类型为16

位,int类型为16位或32位(依机器大小而定)。不同类型适合处理不同类型数据。

22:在处理数据时,优先考虑unsigned类型。这种类型不用考虑负数,且可以获得更大的正数。

23:%u格式说明符显示unsigned int类型的值。

24:整数溢出:

无符号整型溢出: 对于unsigned整型溢出,C的规范是有定义的——“溢出后的数会以2^(8*sizeof(type))作模运算”,也就是说,如果一个unsigned char(1字符,8bits)溢出了,会把溢出的值与256求模。

有符号整型溢出: 发生溢出后变成什么要看编译器的实现, 大部分编译器的做法是算出什么是什么。

显示溢出要对应清楚相对应的格式符符。short类型溢出用%d不会溢出。因为%d是显示int类型10进制。要用%hd(输出短整型)

25:long常量可以用l(小写的L)和L后缀,建议用L后缀,l和1相似,容易混淆。long long常量可以用ll或者LL。u或U表示unsigned。 5uLL =  5 unsigned long long int 存储。

26:%ld 格式说明符打印long整数,x和o可以使用l前缀。

%lx表示以十六进制打印long的值,o表示八进制。格式说明符只能使用小写的L。

26:打印short类型可以用%h。%hd表示输出十进制short数值,

%hx,%ho同理。

27:对于数值要使用对应的格式符,否则会溢出,缩窄转换等一系列问题。

28:char类型储存字符,其本质是0~255整数类型。因为char占1个字节,8bite,可以处理2^8次方不同的数值。ASCII码规定0~127不同的数字对应不同的字符。char负责处理不同数字转换成对应字符。ASCII码中65对应字符‘A’。具体可查询ASCII码表。

29:char的赋值,赋值字符必须用单个字母或者符号,必须用单引号括起来。双引号是指字符串。

char a = 65; char a = ‘A’; 是等效的,因为ASCII码对应。

实际编程中,推荐用字符常量,而不是数值编码,原因是编程环境不支持ASCII码会不能正常运行。

30:转义字符:

31:转义字符的\不识别,因此\n也是字符,可以赋值给变量。

32:使用ASCII码时,应当区别 字符‘4’和常量4的区别。

33:需要使用数值编码时,应当用\032,而不是032。其更能表达是数值编码的意义。类似驼峰命名。

34:%c格式说明符用来打印char字符。%d打印char变量会得到ASCII码对应的整数。

35:关于char类型是无符号还是有符号,取决于编译器实现。

可以通过编译器手册查询,或者用limits.h头文件检查。

C90标准可以对char使用signed和unsigned。

unsigned char 适合处理小整数字符类型。

36:_Bool类型从C99引入。逻辑表示true和false。C语言用1表示true,0表示false。_Bool类型本质上也是整数类型。

37:C99提供了inttypes.h头文件,提供了int16_t(16位有符号整数类型),uint32_t(32位无符号整数类型)。

该类型应用广泛、平台适配转换、win32编程、嵌入式编程等等。

38:浮点数计数法:

 

39:C标准规定,float类型必须至少能表示6位有效数字,取值范围是10 ^ -37  ~ 10^ +37 。通常系统用32位存储一个浮点数。其中8位用于表示指数及其符号,24位用于表示非指数的部分及其符号。

double和float具有最小的取值范围要求,但是最大能表示10位有效数字。一般double是64位 长度。实际中,不同系统有不同的长度分配方式,每一种能保证数值能显示13位有效数字。

40:书写浮点常量时,指数不能带空格。

41:默认情况下,编译器将浮点常量当作double类型。将整数常量当作int类型。

42:使用f后缀的常量会当作float常量,不使用会当作double常量。L后缀代表long double常量。

43:C99标准为表示浮点常量添加了一种 十六进制格式。

浮点常量:0xa.1fp10 ,下面对浮点常量新表示法做出说明

0x (16进制标识符)

a.1f 表示的是十六进制数值。转换成十进制的方法是:

a的十进制×16的0次方

1的十进制×16的-1次方

f的十进制×16的-2次方

= 10 * 16^0 + 1 * 16^-1 + 15* 16^-2

=10.12109375

p(幂数为2的底)

10(幂数为10的幂)

p10 = 2^10 = 1024

整体的0xa.1fp10 转换成10进制数值就是 a.1f先转换10进制在计算p10的值。

0xa.1fp10 = a.1f × 2^10 = 10.12109375 = 1024 = 10364.0

该表示法实际应用很少,不妨作为一个知识扩充,多多益善。

44:%f格式说明符打印十进制计数法的float和double数字。

%e格式说明符打印指数计数法的float和double数字。

43知识点提到的C99新标准16进制浮点计数法,可以用%a打印。打印long double类型需要对应使用%lf %le %la。

45:浮点数的上溢:如果乘法计算一个超过float的最大范围的值,会上溢,printf函数会以int值输出,若宏定义infinity,可以显示无穷大的浮点数。具体参考infinity的使用。

46:浮点数的下溢:如果除法计算一个很小的数值,浮点数的位数部分会进行右移,空出首位二进制,并丢弃最后一位二进制。

0.1234E-10 /10 会得到0.0123E-10。此过程会损失一位有效数值。该过程称为下溢。

47:浮点数计算误差取决于存储方式和类型以及数据的大小。

原理是十进制的无理数不可能在计算机内无限存储,会被截断成有限位数。对于大浮点和小浮点运算,末尾的精度会丢失。

因此,浮点数计算会有上溢、下溢、舍入误差,精度丢失等情况,要慎重处理浮点数。

48:C99支持复数和虚数类型,对有计算需求的可以查看complex.h说明。

49:C有基本数据类型(整数,浮点数),字符类型(也可视为最小的整数类型),复数,虚数类型。额外的,还有数组、指针、结构、联合体等等其他类型。C不支持字符串(string)类型,可以使用数组和字符类型处理字符串。

50:C提供内置运算符sizeof以字节为单位给出类型的大小。

sizeof语法: sizeof(),参数接收一个数据,包括数据类型,变量,指针,等等。返回一个int类型的值。该值等于参数所占的内存字节。

printf(“%d”,sizeof(int)); //打印int的字节长度

int b = sizeof(num);   //将num的字节大小赋值给b。

51:在为变量使用数据类型时,应当保证类型与常量匹配。

否则会出现缩窄转换和其他的问题。

52:printf()函数的参数格式不匹配,会出现一些问题。

%d显示float值并不会转换成近似的Int值,而是显示垃圾值(类似随机值).%f显示int值也不会转换成浮点值。最重要的一点,有的编译器不会捕捉到这种错误。也可以称为C陷阱。

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值