海口C语言开发培训哪家好
海口C语言开发培训哪家好
1983年该语言被正式命名为C++。自从C++被发明以来,它经历了3次主要的修订,每一次修订都为C++增加了新的特征并作了一些修改。
C语言培训本课程是达内的经典项目,采用小班固定入学模式,由C语言培训教学,并具有多年C语言培训经验。 讲座和练习相结合的教学模式贯穿于整个过程,学生每个人拥有一台计算机以确保学习效果。重点讲解C语言及数据结构和算法,QT开源框架库STL技术,更有考察和实践演练,学习合格后达内C语言培训可推荐学生们工作!
多年迭代,课程源自企业需求,紧跟时代
阶段一
C 语言编程基础
1.计算机概述,Linux Eclipse 开发环境搭建。
2.基本数据类型,流程控制。
3.各种存储结构优劣对比,排序算法优劣对比。
阶段二
Linux C 系统级开发
1.掌握文件的打开与关闭、文件的读写、系统与标准I/O。
2.掌握子进程创建、进程间通讯、信号捕获和处理。
3.掌握线程创建、线程同步技术。
阶段三
C++语言及数据库
1.熟悉名字空间、各种数据类型的操作。
2.熟练掌握C++ 各种异常情况处理,输入输出流操作。
3.了解C++ 泛化数据类型技术原理。
C语言软件工程师需要很大
C语言软件工程师,根据三大专业招聘网站公布的IT公司招聘岗位,定量统计显示,对C语言软件工程师的需求一直在上升,人才需求发展处于稳定状态。从目前的工作市场来看,企业对C语言人才的需求很大,但无法招聘到合适的人才。很多应聘者因为缺乏C语言能力而被用人单位拒绝。C语言人才的职场面临着“有人不工作,没人工作”的尴尬局面。毕竟没有真正的天赋是很难被认可的。
无符号数的输出
无符号数可以以八进制、十进制和十六进制的形式输出,它们对应的格式控制符分别为:unsigned short | unsigned int | unsigned long | |
---|---|---|---|
八进制 | %ho | %o | %lo |
十进制 | %hu | %u | %lu |
十六进制 | %hx 或者 %hX | %x 或者 %X | %lx 或者 %lX |
上节我们也讲到了不同进制形式的输出,但是上节我们还没有讲到正负数,所以也没有关心这一点,只是“笼统”地介绍了一遍。现在本节已经讲到了正负数,那我们就再深入地说一下。
严格来说,格式控制符和整数的符号是紧密相关的,具体就是:
- %d 以十进制形式输出有符号数;
- %u 以十进制形式输出无符号数;
- %o 以八进制形式输出无符号数;
- %x 以十六进制形式输出无符号数。
那么,如何以八进制和十六进制形式输出有符号数呢?很遗憾,printf 并不支持,也没有对应的格式控制符。在实际开发中,也基本没有“输出负的八进制数或者十六进制数”这样的需求,我想可能正是因为这一点,printf 才没有提供对应的格式控制符。
下表全面地总结了不同类型的整数,以不同进制的形式输出时对应的格式控制符(--表示没有对应的格式控制符)。
short | int | long | unsigned short | unsigned int | unsigned long | |
---|---|---|---|---|---|---|
八进制 | -- | -- | -- | %ho | %o | %lo |
十进制 | %hd | %d | %ld | %hu | %u | %lu |
十六进制 | -- | -- | -- | %hx 或者 %hX | %x 或者 %X | %lx 或者 %lX |
有读者可能会问,上节我们也使用 %o 和 %x 来输出有符号数了,为什么没有发生错误呢?这是因为:
- 当以有符号数的形式输出时,printf 会读取数字所占用的内存,并把较高位作为符号位,把剩下的内存作为数值位;
- 当以无符号数的形式输出时,printf 也会读取数字所占用的内存,并把所有的内存都作为数值位对待。
对于一个有符号的正数,它的符号位是 0,当按照无符号数的形式读取时,符号位就变成了数值位,但是该位恰好是 0 而不是 1,所以对数值不会产生影响,这就好比在一个数字前面加 0,有多少个 0 都不会影响数字的值。
如果对一个有符号的负数使用 %o 或者 %x 输出,那么结果就会大相径庭,读者可以亲试。
可以说,“有符号正数的较高位是 0”这个巧合才使得 %o 和 %x 输出有符号数时不会出错。
再次强调,不管是以 %o、%u、%x 输出有符号数,还是以 %d 输出无符号数,编译器都不会报错,只是对内存的解释不同了。%o、%d、%u、%x 这些格式控制符不会关心数字在定义时到底是有符号的还是无符号的:
- 你让我输出无符号数,那我在读取内存时就不区分符号位和数值位了,我会把所有的内存都看做数值位;
- 你让我输出有符号数,那我在读取内存时会把较高位作为符号位,把剩下的内存作为数值位。
说得再直接一些,我管你在定义时是有符号数还是无符号数呢,我只关心内存,有符号数也可以按照无符号数输出,无符号数也可以按照有符号数输出,至于输出结果对不对,那我就不管了,你自己承担风险。
下面的代码进行了全面的演示:
- #include <stdio.h>
- int main()
- {
- short a = 0100; //八进制
- int b = -0x1; //十六进制
- long c = 720; //十进制
- unsigned short m = 0xffff; //十六进制
- unsigned int n = 0x80000000; //十六进制
- unsigned long p = 100; //十进制
- //以无符号的形式输出有符号数
- printf("a=%#ho, b=%#x, c=%ld\n", a, b, c);
- //以有符号数的形式输出无符号类型(只能以十进制形式输出)
- printf("m=%hd, n=%d, p=%ld\n", m, n, p);
- return 0;
- }
a=0100, b=0xffffffff, c=720
m=-1, n=-2147483648, p=100
对于绝大多数初学者来说,b、m、n 的输出结果看起来非常奇怪,甚至不能理解。按照一般的推理,b、m、n 这三个整数在内存中的存储形式分别是:
注意,-7fff 是十六进制形式。%d 本来应该输出十进制,这里只是为了看起来方便,才改为十六进制。其实这跟整数在内存中的存储形式以及读取方式有关。b 是一个有符号的负数,它在内存中并不是像上图演示的那样存储,而是要经过一定的转换才能写入内存;m、n 的内存虽然没有错误,但是当以 %d 输出时,并不是原样输出,而是有一个逆向的转换过程(和存储时的转换过程恰好相反)。
也就是说,整数在写入内存之前可能会发生转换,在读取时也可能会发生转换,而我们没有考虑这种转换,所以才会导致推理错误。那么,整数在写入内存前,以及在读取时究竟发生了怎样的转换呢?为什么会发生这种转换呢?我们将在《整数在内存中是如何存储的,为什么它堪称天才般的设计》一节中揭开谜底。
更多培训课程,学习资讯,课程优惠等学校信息,请进入 海口达内教育海口php培训海口java培训 网站详细了解,免费咨询电话:400-998-6158