嵌入式C
进制转换
二进制(0B)转八进制(0O)和十六进制(0X)
一个八进制数可以由三位二进制数表示,一个十六进制数可以有四位二进制数表示。
二进制 | 八进制 | 十六进制 |
---|
0000 | 0 | 0 | 0001 | 1 | 1 | 0010 | 2 | 2 | 0011 | 3 | 3 | 0100 | 4 | 4 | 0101 | 5 | 5 | 0110 | 6 | 6 | 0111 | 7 | 7 | 1000 | 10 | 8 | 1001 | 11 | … |
例如:
步骤 | 结果 |
---|
二进制 | 1001100001111101 | 切分 | 001 001 100 001 111 101(八进制)1001 1000 0111 1101(十六进制) | 八进制 | 1 1 4 1 7 5 | 十六进制 | 9 8 7 D |
结构体
结构声明也称作定义结构体,作用是描述结构如何组合,下面是结构体的常见定义方法。
struct Student{
char name[20];
int num;
float score;
};
struct Student stu1;
其中,Student 是结构体名,stu1 是 Student 结构体变量名 stu1。在完成了结构体声明和结构体变量的定义(且初始化)后即可赋值或者调用结构体中的数据了,下面是结构体内数据的常见使用方法。
stu1.name = 'hjh';
stu1.num = 20920;
stu1.score = 99.99;
if(stu1.score >= 60){printf("及格!");}else{printf("不及格!");}
还有一种结构体的重要使用方法是typedef
typedef struct{
StructList
}Student;
Student stu1;
位操作
符号 | 描述 | 运算规则 |
---|
& | 与 | 两个位都为1时,结果才为1 | | | 或 | 两个位都为0时,结果才为0 | ^ | 异或 | 两个位相同为0,相异为1 | ~ | 取反 | 0变1,1变0 | << | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 | >> | 右移 | 各二进位全部右移若干位,对无符号数,高位补0 |
'''
与运算: 或运算 异或运算 取反运算 左移运算,右移同理
1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1
& 1 1 0 0 1 |1 0 0 0 1 ^ 1 1 0 0 1 ~ 1 0 0 1 1 << 3(位)
------------- ------------- ------------- ------------- -------------
1 0 0 0 1 1 0 0 1 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 0
'''
关键字
static关键字
static 关键字不仅可以用来修饰变量,还可以用来修饰函数。在使用 static 关键字修饰变量时,我们称此变量为静态变量。全局变量属于静态存储方式,但并不是静态变量。全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,全局变量在各个源文件中都是有效的。如果我们希望全局变量仅限于在本源文件中使用,在其他源文件中不能引用,也就是说限制其作用域只在定义该变量的源文件内有效,而在同一源程序的其他源文件中不能使用。这时,就可以通过在全局变量之前加上关键字 static 来实现,使全局变量被定义成为一个静态全局变量。这样就可以避免在其他源文件中引起的错误。也就起到了对其他源文件进行隐藏与隔离错误的作用,有利于模块化程序设计。
extern关键字
如果在所有函数之外定义的变量没有指定其存储类别,那么它就是一个外部变量,它的作用域是从它的定义点到本文件的末尾(在单个源文件中的确是这样,如果有多个源文件,全局变量的作用范围不是从变量定义处到该文件结尾,而是在其他文件中也有效),但是如果要在定义点之前或者其他文件中使用它,那么就需要使用关键字extern对其进行声明
const关键字
有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小。为了满足这一要求,可以使用const 关键字对变量加以限定。由于常量一旦被创建后其值就不能再改变,所以常量必须在定义的同时赋值(初始化),后面的任何赋值行为都将引发错误。一如既往,初始化常量可以使用任意形式的表达式
|