C语言学习笔记(一)

1. 计算机把浮点数分成小数部分和指数部分来表示,并且分开存储这两部分。

2. 一般而言,存储一个int要占用一个机器字长。

3. 声明变量时,只为变量分配内存空间,并不做初始化操作。(局部变量)

4. 利用printf打印数据时,转义符的个数要和后面的参数个数匹配。

5. C语言中,0x或0X前缀表示十六进制值。0前缀表示八进制值。

6. 不同的进制使用不同的转换说明。十进制使用%d,八进制使用%o,十六进制使用%x,另外,要显示各进制数的前缀0、0x、0X,必须分别使用%#o,%#x,%#X。

7. C语言提供3个附属关键字修饰基本整数类型:short、long、unsigned。short int类型(或简写为short)占用的空间可能比int类型少,short是有符号类型。long int或long占用的空间可能比int多,long也是有符号类型。long long int或long long(C99标准加入),占用的空间可能比long多,该类型至少占64位。Long long也是有符号类型。Unsigned int或unsigned只用于非负数的场合。

8. 在C90标准中,添加了unsigned long int或unsigned long和unsigned short int或unsigned short。C99标准又添加了unsigned long long int 或unsigned long long。

9. C语言为了适应不同的机器,只规定了short占用的空间不能多于int,long占用的空间不能少于int。

10. Unsigned或unsigned int常用于计数。

11. 如果在long类型和int类型占用空间相同的机器上编写代码,当确实需要32位的整数时,应使用long而不是int,以便把程序移植到16位机上时,也能正常工作。在int设置为32位的系统中要使用16位的值,应使用short类型以节省空间。使用short类型的另一个原因是,计算机中某些组件使用的硬件寄存器是16位。

12. 通常,代码中使用的数值,都被存储为int类型。如果一个数值超过int的范围,编译器会将其视为long int。如果数字超过了long int的范围,编译器则将其视为unsigned long。如果还不够大,则将其视为long long或者unsigned long long。

13. 八进制或十六进制常量被视为int类型,如果值太大,编译器尝试将它们视为unsigned int,如果还不够,编译器会依次使用long、unsigned long、long long、unsigned long long。

14. 要将一个较小的数字常量作为long类型看待,可以在值的末尾加上l或者L。当成long long类型看到,可以在后面加ll或者LL。另外,u或者U后缀表示unsigned long long。如5ull、6LLU。

15. 当达到它能表示的最大值时,会重新从起始点开始。Unsigned int类型的变量从0开始。而int类型的变量从-2147483648开始。

16. 溢出行为属于未定义行为,C标准并未定义有符号类型的溢出规则。

17. 打印unsigned int类型的值,使用%u转换说明。打印long类型的值,使用%ld转换说明。在x或o前面可以使用l前缀,分别表示以十六进制数表示long类型整数和以八进制数表示long类型整数。

18. 对于short类型,可以使用h前缀,%hd表示以十进制显示short类型整数。%ho表示以八进制数表示short整数。另外h和l前缀都可以和u一起使用,表示无符号类型。

19. 对于short类型的整数,无论以%hd还是%d打印,值都是一样的,因为在给函数传递参数的时候,C编译器将short类型的值自动转化为int类型的值。因为int类型被认为时计算机处理整型数时最高效的类型。

20. 标准的ASCII码的范围是0-127,只需7位二进制数表示即可。许多其他系统还提供扩展ASCII码,也在8位的表示范围之内。一般而言,C语言会保证char类型足够大,以存储系统的基本字符集。

21. 许多字符集都超过127,甚至多于255。如日本汉字(kanji)字符集。商用的unicode创建了一个能表示世界范围内多种字符集的系统,目前包含的字符超过110000个。

22. C语言将1字节定义为char类型占用的位数,因此无论16位系统还是32位系统,都可以使用char类型。

23. C语言中,使用单引号括起来的单个字符被称为字符常量。实际上,字符以数字形式存储,所以也可以使用数字来对字符变量赋值。

24. 字符常量具有一个特性,将一个字符常量’ASDF’赋值给一个char类型变量,那么只有最后8位是有效的,即char类型变量里面保存的是’F’。

25. 表示ASCII码中的非打印字符时,可以使用对应的码值或者使用转移字符。

26. C标准规定报警字符不得改变活跃位置。标准中的活跃位置指的是显示设备中下一个字符即将出现的位置,也即光标位置就是活跃位置。

27. 从C90开始,不仅可以使用八进制、十进制形式表示字符常量,还可以使用16进制形式来表示字符常量。比如,Ctrl+P字符的ASCII码十六进制码为10,可表示为‘\x10’或‘\x010’。

28. 有些编译器将char实现为有符号类型,而有的编译器又将char实现为无符号类型。在C90标准中,允许在char的前面使用unsigned 或signed。这样,无论编译器默认char是什么类型都不要紧了。

29. C99中,添加了_Bool类型,用于表示布尔值,即true和false。C语言中,用1表示true,0表示false,所以_Bool类型实际上也是一种整数类型。

30. C语言提供了许多的整数类型,但某些类型名在不同系统中的功能不一样,C99增加了两个头文件stdint.h和inttypes.h,以确保C语言的类型在各个系统中的功能一致。

31. 精确宽度整数类型、最小宽度类型、最快最小宽度类型、

32. C标准规定,float类型必须至少能表示6位有效数字,且取值范围至少是10E-37到10E37。通常,系统存储一个浮点数需要32位,其中8位用于表示指数的值和符号,剩下的24位表示非指数部分及其符号。

33. Double类型和float类型的最小取值范围相同,但至少必须能表示10位有效数字。C语言的第三种浮点类型为long double,C语言只保证long double类型至少与double类型的精度相同。

34. 代码中,有多种形式书写浮点数,浮点型常量的基本形式:有符号的数字(包括小数点),后面紧跟e或者E,最后是一个有符号数字表示10的指数。浮点数可以没有小数点或者指数部分,但是不能两者同时省略。

35. 默认情况下,编译器假定浮点型常量是double类型的精度。在浮点数后面加f或F后缀,可以覆盖默认设置。使用l或L后缀,使得数字变成long double。

36. C99标准中,添加一种新的浮点型常量格式,用十六进制表示浮点型常量。即在十六进制数前加上十六进制前缀(0x或者0X),用p或者P代替e或者E,用2的幂代替10的幂(p计数法)。比如0xa.1fp10表示的值是(10 + 1/16 + 15/256)* 1024。需要说明的是,并非所有的编译器都支持C99的这一特性。

37. 使用%f转换说明打印十进制计数法的float或者double,用%e打印指数计数法的浮点数。如果系统支持十六进制格式的浮点数,可用a和A分别代替e和E。打印long double类型使用%Lf、%Le或者%La。

38. 当计算导致数字超过当前浮点型能表示的最大值,就会发生上溢,这种行为在过去是未定义的,但现在C语言规定,这种情况下,会赋予一个表示无穷大的特定值。

39. 假设一个数字是float类型能用全部精度 表示的最小的数,现在将它除以2,这时候指数会减少,但如果指数已经是最小值的时候,计算机只能将尾数部分的位向右移,此时,虽然得到结果,但是却损失了原有末尾的有效数字,这种情况叫下溢,C语言将损失了类型全精度的浮点值称为低于正常的浮点值。目前,C库已经提供了用于检查计算是否会产生低于正常值的函数。

40. 另一个特殊的浮点值为NaN(not a number)。比如给asin()函数传递一个值,该函数返回一个角度值。但是正弦值不能超过1,如果传入大于1的数,该函数的行为是未定义,这时,函数返回一个NaN值。

41. C99标准支持复数类型和虚数类型,但是有所保留。一般而言,复数类型都是可选项。C11标准将整个复数软件包作为可选项。

42. C语言有3种复数类型:float_Complex、double_Complex、long double_Complex。每个复数变量包括两个基本类型的值,分别表示复数的实部和虚部。C语言的3种虚数类型:float_Imaginary、double_Imaginary和long double_Imaginary。如果包含complex.h头文件,便可用complex代替_Complex,用imaginary代替_Imaginary。还可用I代替-1的平方根。

43. Sizeof是C语言的内置运算符,以字节为单位给出指定类型的大小。C99和C11提供%zd转换说明来匹配sizeof的返回类型。一些不支持C99和C11的编译器可用%u或%lu来代替%zd。

44. C语言定义了char类型是1个字节。而在char为16位、double类型为64位的系统中,sizeof给出的double是4字节。

45. C语言规定,当缓冲区满、遇到换行字符、或者需要输入的时候,此时会刷新缓冲区。另一种刷新缓冲区的方法是使用fflush()函数。

46. C语言允许混合数据类型的表达式,但是会进行自动类型转换。以便实际运算时统一使用一种类型。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容