01 C语言的操作对象
资源
内存
内存类型的资源,LCD缓存,LED灯
02 如何用C语言编译器去描述这些类型资源的属性
2.1 资源的属性大小问题
C语言在考虑描述内存类型的资源,就要考虑描述这个资源类型的大小
引出问题:01 如何定义资源的大小?
2.2 关键字 数据类型,定义字符串大小的关键字
关键:要记得每一个数据类型对应的大小,具体的数据类型大小由编译器决定。因此在不同的编译器和操作系统中每个关键字对应的数据类型大小不一样。
例如:
int a ;
sizeof(a)
数据类型大小是不定的
char //一个字节
int //四个字节
short //两个字节
long//
signed//
unsigned//
double//
float//
03 关键字:char
char类型用于储存字符(如,字母或标点符号),但是从技术层面看,char是整数类型。因为char类型实际上储存的是整数而不是字符。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。
美国最常用的编码是ASCII编码,本书也使用此编码。例如,在ASCII码中,整数65代表大写
字母A。因此,储存字母A实际上储存的是整数65(许多IBM的大型主机使用另一种编码——EBCDIC,其原理相同。另外,其他国家的计算机系统可能使用完全不同的编码)
嵌入式最终的目的是操纵硬件芯片。
3.1硬件芯片操纵的最小单位是:bit
bit 只有 1 和 0 两种状态。(高低电平),在软件中称为位。
3.2 软件操作的最小单位
8 bit = 1Byte(1个字节)
3.3 应用场景
硬件处理的最小单位 char
例子:
char buff[xx]
int buff[xx]
ACS||码问题
2^10 = 1024
2^9 = 512
2^8 = 256
2^7 = 128
2^6 = 64
2^5 = 32
2^4 = 16
补充
软件对应的最小单位 8bit 对应的二进制 2^8 . 对应的10进制数值是256;
面试
// An highlighted block
char a =300;
a++;
// 一般都是内存溢出,a里面是一个未定的垃圾数值;
2.字符常量和初始化
如果要把一个字符常量初始化为字母 A,不必背下 ASCII 码,用计算机语言很容易做到。通过以下初始化把字母A赋给grade即可:
//
char grade = 'A';
在C语言中,用单引号括起来的单个字符被称为字符常量(character constant)。编译器一现’A’,就会将其转换成相应的代码值。单引号必不可少。下面还有一些其他的例子:
// An highlighted block
char broiled; /* 声明一个char类型的变量 */
broiled = 'T'; /* 为其赋值,正确 */
broiled = T; /* 错误!此时T是一个变量 */
broiled = "T"; /* 错误!此时"T"是一个字符串 *
如上所示,如果省略单引号,编译器认为T是一个变量名;如果把T用双引号括起来,编译器则认为"T"是一个字符串。字符串的内容将在第4章中介绍。实际上,字符是以数值形式储存的,所以也可使用数字代码值来赋值:char grade = 65; /* 对于ASCII,这样做没问题,但这是一种不好的编程
风格 */
在本例中,虽然65是int类型,但是它在char类型能表示的范围内,所以将其赋值给grade没问题。由于65是字母A对应的ASCII码,因此本例是把A赋给grade。注意,能这样做的前提是系统使用ASCII码。其实,用’A’代替65才是较为妥当的做法,这样在任何系统中都不会出问题。因此,最好使用字符常量,而不是数字代码值。
奇怪的是,C语言将字符常量视为int类型而非char类型。例如,在int为32位、char为8位的ASCII系统中,有下面的代码:
char grade = ‘B’;
本来’B’对应的数值66储存在32位的存储单元中,现在却可以储存在8位的存储单元中(grade)。利用字符常量的这种特性,可以定义一个字符常量’FATE’,即把4个独立的8位ASCII码储存在一个32位存储单元中。如果把这样的字符常量赋给char类型变量grade,只有最后8位有效。因此,grade的值是’E’