typedef 宏 const 位运算

一.typedef

1.作用:

给已经有的数据类型起别名 并不是定义了新的数据类型

2.位置:

在主函数之前

例如:typedef int AA; //AA就是int

了解:typedef unsigned int UNIT; 这行命令在C的状态下 有这行代码才可以使用UNIT来定义一个变量

但是如果加上头文件#include<windows.h> UNIT就可以直接使用

二.宏(广泛使用)

1.提出:程序编译的四个过程?

①预处理:引入头文件 加载宏

②编译:检查词法(即单词是否打错) 语法(即标点符号 流程结构) 语义

注:这个过程是不对逻辑进行检查的 通过检查后转换成汇编码

③汇编:转化成机器码

④链接:把代码连接到可执行文件

2.宏的定义:以“#”开头的代码 都是预处理代码

3.组成:#宏的语法 + 宏的名字 + 宏的内容

注:宏是很单纯的东西 它的作用就是单纯的替换 宏的名字一般都是大写字母

例:

1 #define AA int a = 10

一般都不加分号 但是也可以加 加了容易报错

4.位置:在主函数之前

来一个耍宝例题:如何不用循环就输出1000个“Hello World”呢?(其实现实生活中没有这么用的 仅供娱乐)

 1 #include<stdio.h>
 2 
 3 #define A printf("Hello World\n");
 4 #define B A A A A A A A A A A 
 5 #define C B B B B B B B B B B
 6 #define D C C C C C C C C C C
 7 
 8 int main()
 9 {
10     D
11 }

5.有参数的宏

例如:#define ADD(a,b) a+b !!!如果你这样写就大错特错了

上面的那条语句在执行 ADD(1,2)*5的时候 输出的结果 是11

正确的写法应该是:#define ADD(a,b) (a+b)

那么乘法就应该是:#define MUL(a,b) ((a)*(b))

主要注意的是:在定义宏的时候 参数之间是不冲突的 只局限于定义的那一行

比较大小的宏:#define MAX(a,b) ((a)>(b)) ? 1 : 0 //大于的话 输出返回1 否则为0

这里要注意括号 要熟悉运算符优先级

6.宏的应用:

这个需要联系的数组后面讲的冒泡排序 这个在这篇的后面写

三.const

1.定义:在C语言中 const叫“只读变量” 在C++中叫“常量”

注:const修饰的变量必须初始化 在C语言中是可以改的 但是需要方法

例如:

1 const int a = 10;

2.位置:可以放在int的前面 也可以放在int的后面

了解(修改方法):

1 int* p = (int* ) &a;
2 * p = 100;

3.总结:

const在*的左边时 *p不能改 p可以改

const在*的右边时 *p可以改 p不能改

*两边都有const的时候 *p和p都不能改 即:int const * const p = &a;

但是a可以改 只是不能通过指针来修改内存了

四.位运算

1.引入:

在内存中 所有存储存的都是二进制 都是补码

正数:原码 = 反码 = 补码

负数:例:原码 1000 0001 (char b = -1;)

反码1111 1110 //符号位不变 其余的取反

补码 1111 1111 //补码 = 反码 + 1

2.位运算的类型:

①与运算 &:都是1为1 其余的都是0

例如:1 & 2 结果为0

②或运算 |:有1就是1

例如:1 | 2 结果为3(用二进制算)

③取反(单目运算符) ~:1变0 0变1

④异或 ^:相同为1 不同为0

⑤右移 >>:

例如:1 >> 2 结果为0(看二进制)

⑥左移:

例如:1 << 2 结果为4(看二进制)

注:左移和右移的时候 操作的都是补码 补符号位 移动几位就补几个0

3.位运算的应用:

话不多说 直接上例题:我们要找对象 定义一个人的条件 性别 身高 体重 带不带眼镜 正常来说需要四个变量

但是我们相用一个变量就解决 我们应该如何解决这个问题呢?

 1 #include<stdio.h>
 2 
 3 #define SEX 1 //0 男 1 女
 4 #define HIGH 2 //0 高 1 矮
 5 #define WEIGHT 4 //0 胖 1 瘦
 6 #define GLASS 8 //0 不带 1 带
 7 
 8 int main()
 9 {
10     char style = 0 | GLASS;
11 
12     if(style & SEX)
13     {
14         printf("女的 ");
15     }
16     else
17     {
18         printf("男的 ");
19     }
20 
21     if(style & HIGH)
22     {
23         printf("矮的 ");
24     }
25     else
26     {
27         printf("高的 ");
28     }
29 
30     if(style & WEIGHT)
31     {
32         printf("瘦的 ");
33     }
34     else
35     {
36         printf("胖的 ");
37     }
38 
39     if(style & GLASS)
40     {
41         printf("带眼镜的 ");
42     }
43     else
44     {
45         printf("不带眼镜的 ");
46     }
47 }

输出结果为:男的 高的 胖的 带眼镜的

注:我们定义了一个char类型的变量 char一个字节 八位 我们可以把每位都看成不同的条件

每位或上1 就可以控制其条件 在判断的过程中 如代码中的style | GLASS

SEX:0000 0001 不是0就是1 所以在进行&运算的时候 同为1的为1 其他位并不会影响运算 

    原文作者:Aaaaaalei
    原文地址: http://www.cnblogs.com/Aaaaaalei0612/p/8687068.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞