一、位运算
计算机 0 1 1Byte --存储单位 1Byte = 8bits
软件控制硬件 编程 -->CPU-->寄存器(位)--硬件关联 C语言上 位运算
& 运算规则:一假则假 --- 清0
| 运算规则:一真则真
~ 运算规则: 真假相对
^ 异或: 运算规则: 相同为0 不同为1 //同假异真
<< 左移 数值<<位数 //左移一位相当于乘以2
>> 右移 数值>>位数
注意:
看数据类型
有符号类型的数据,此时右移 最高位 补符号位 //算术右移
无符号类型的数据,此时右移 最高位 补0 //逻辑右移
二、预处理
#include
#define N 10
预处理命令: 都是以 # 开头的
编辑程序 --vi
编译程序 --gcc
--------------------------------------------------------------------------------------------------------
gcc的编译过程:
.c --- 机器代码 (0110)
预处理: 把程序中 # 开头的预处理命令 执行了 。
形成 --预处理文件 --源代码文件 gcc -E main.c -o main.i .i 文件 进行 下一步
编译: // 编译成汇编文件 gcc -S main.i -o main.s
汇编 //将汇编文件 编译 成 目标文件(机器代码) gcc -c mian.s -o main.o
链接: 需要与用到相关库函数进行链接 ,生产最终可执行文件。
sqrt -lm (math)
----------------------------------------------------------------------------------------------------------------------
预处理:
1.宏定义
2.头文件包含
3.条件编译
1.宏定义
(1).#define N 10
注意:
a. 宏名 --标识符
符合标识符的定义规则。
一般写成大写。
b. 宏对应的值 是一个常量
N = 20;
c. 只是做简单的文本的替换,不做计算
d. 宏的嵌套
e.最后不能写分号,因为分号也会作为宏值一部分,参与到文本的替换中
f.#undef 终止宏的定义
后面的代码不能再用这个宏
(2).带参的宏
形式:
#define 宏名(参数) 宏值
宏展开的副作用: 能加括号的都加上 。
带参宏:
文本替换 --- 有可能导致,
源代码的体积变大 。
快 --预处理阶段干
编译之后,对应的代码就已经在可执行代码中了
函数:
调用 ---- 只有一份代码
会有时空开销。
可以选择带参宏,功能小,代码量少。
2.文件包含
#include <>
#include ""
eg:
#include <stdio.h>
<> //表示包含的文件,在编译器默认的搜索路径下 。
/usr/include 找的时候,直接到默认路径下寻找。
#include <test.txt>
#include "/usr/include/test.txt"
"" 先在当前目录下寻找,若没有再到默认目录下寻找。
怎么用?
系统相关的标准头文件,用<>
自己定义的 用 ""
总结:
1.宏定义
2.文件包含
3.条件编译
#if 0
#endif