一.数据在程序中如何表现?
1. 数据以常量和变量的形式在程序中表现出来,常量又分直接常量(如1,100,‘a’等)和符号常量(宏定义的常量)。
注:符号常量不能在宏定义后再次赋值。
2.变量名和变量值是一个概念吗?
不是。变量名实际上是代表一个内存地址,变量值实际上是通过变量名找到相应的内存单元,按照规则读取其中的值。
3.变量名的长度有限制吗?
变量名的长度要小于标识符的长度, 标识符的长度取决于不同的编译器。
4.C语言如何定义标识符?
标识符只能由数字,字母,下划线组成,且第一个字符不能是数字。
二.整型常量的表示方法?
1.十进制整数:如123。
2.八进制整数:以0开头的数是八进制数,0123(相当于十进制的83)。
3.十六进制整数:以0x开头的数是十六进制数,0x123。
三.整型数据在内存中的存放形式?
首先所有的数据在内存中都是以二进制的形式存放。正整数与负整数在内存中的存放有所不同。计算机以补码的形式存放整型数据,正整数的补码和原码相同,负整数的补码是将该数的绝对值的二进制形式,按位取反再加1。可知,在存放整数的存储单元中,最左面的一位是表示符号的,该位为0,表示数值为正,该位为1,表示数值为负(注:只限于在定义有符号整数时这样理解是可以的)。
四.整型数据的溢出问题?
通常数据溢出时程序并不报错。所以这一块要弄清楚。
五.浮点型常量的表示方法?
1.十进制小数形式:如123。
2.指数形式:如1.23E2,12.3e1等,注意e(E)之前必须有数字,且后面的指数必须是整数。
六.浮点型数据在内存中的存放形式?
系统把一个浮点数数据分成符号部分,小数部分和指数部分分别存放在连续的存储单元中。计算机是用二进制数来表示小数部分,用2的幂次来表示指数部分。
究竟有多少位来表示小数部分?多少位来表示指数部分?不同的标准有所不同。小数部分占的位数越多,数的有效位数也就越多,精度也就越高。指数部分占的位数越多,则能表示的数值范围就越大。
注:1.同样的存储空间,浮点数能表示比整数大的多的范围,但这是以牺牲数据的精度为代价的。尽量避免很大的浮点数与很小的数进行相加减。
2.二进制小数与十进制小数并没有完全一一对应的关系,二进制小数对于十进制小数来说相当于离散的,而不是连续的。也就是说并不是所有的十进制的实数在有限的存储单元中能用二进制刚好表示出来。各种浮点数数据类型都有它的精度范围。
3.浮点数数据在多个处理器之间通信时,传递的数值是它的二进制数,比如1234.5678这个浮点数的二进制数是0x449A522B,如果使用串口发送的话,就会发现串口里发送的是0x44,0x9A,0x52,0x2B(发送的顺序也可能是逆序),接受端接受到这4个数据后再组合成0x449A522B,按照浮点数解析的规则被解析为1234.5678,如果两个处理器使用的浮点数解析的规则不同,那么数据可能会有很大差异。
七.字符型数据
1.转义字符虽然包含两个或多个字符,但它代表一个字符,在内存中只占一个字节。
2.字符与字符串是不同的概念,不能把一个字符串常量赋给一个字符变量。
3.C语言允许字符数据与整数直接进行算术运算,如'A'+32会得到97,即'a'。
4.C规定在每一个字符串常量的结尾加一个“字符串结束标识”,即‘\0’,‘\0’是系统自动加上的,不需要我们加。
八.基本数据类型的混合运算
横向向左的箭头表示运算时必定的转换,纵向的箭头表示当运算的对象不同时转换的方向。这里编程要留心有符号数会转换为无符号数。