1、定义一个有符号数“char a = -1”,实质上等同于a = 0xff,因为0b 1111 1111取反,即0b 1000 0000,再加1,即0b 1000 0001(最高位为符号位,0正1负),通过这里也可以看出,如果变量a不断右移,也得不到0,因为有符号数最高位会被补位为1。

2、定义一个小数3.14,在没有指定数据类型之前,系统会将其用double存起来,如果精度不要求太高,想要以float类型存储,可以写成3.14f,因为一个duble占8Byte,所以系统中使用多个高精度小数情况下耗费内存会比较大。

3、共用体和结构体的区别在于数据是重叠还是延续,结构体是一个数据结束后另一个数据紧接着上一个数据的尾地址接着创建,而共用体则是两个数据共同使用同一个起始地址,所以修改一个数据会导致另一个数据也发生变化。

4、枚举类型表象上虽然由多个常量组合而成,但是如果通过sizeof()函数求取其空间大小,实际上返回值只是一个整型变量所占空间的大小,这也是为什么最后枚举变量只能取列表中的一个值缘故。

5、利用通用关键字定义一个变量在复杂系统中会显得不够直观,类如int x = 3600,而使用typedef对int起别名以后(typedef int time_t),写成time_t x = 3600,就能通过别名起到帮助阅读和推测变量含义的功能。

6、switch()括号中填入的判断内容不能是浮点类型。

7、goto如果能做到不在多个函数中跳转,而是只在一个函数的内部进行跳转,那么就是可用的、好用的。

8、CPU内部中的寄存器,可将其理解成缓存,相比在CPU外部的内存,处理这两者的速度肯定是:寄存器>内存。

9、寄存器不像内存具有一个明确的地址(类似0x8000 0000),而是用R0、R1、Rx来指示,所以对寄存器取地址符&是无效的。

10、并不是使用了register类型修饰符对一个变量进行指定,那么该变量就一定会别存放到寄存器中,要看系统是否还有足够的寄存器可以存放。

11、如果一个变量是由外部控制的(例如硬件发生变化时所定义的变量值就跟着变化的情况,像按键触发导致变量值发生翻转),那么这种变量就不希望编译器对其进行优化(优化是因为编译器觉得可以直接使用当前变量值进行替换运算,可是编译器不知道的是,这个变量会在某一时刻发生变化),这时就需要加上volatile对此变量进行修饰(这就是通过人为的方式告知编译器你要时刻监测该变量值,而不要自作主张的意思)。