黑马程序员--C语言自学笔记---07预处理、进制、机器码

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1.   #include指令

1)<>:表示包含的是系统的文件

2)#include“ ”:表示包含的是一个用户定义的文件,可以是头文件,也可以是普通文件

3)#include 是一个预处理指令,不是一条语句,所以后面不需要使用分号

4)#include文件包含的实质:把要包含的文件的内容替换掉当前书写的include语句

5)#include不一定要放在程序开头

 

2.   include指令的文件搜索顺序

1)        include “ ”包含自定义文件

搜索顺序:-->当前目录--->编译器include目录--->找系统目录--->报错

①  前目录:和main.c文件同一个文件夹(包含子目录)下

② 编译器include目录:xcode显示包内容/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/Macosx10.10.sdk/usr/include

如果修改了编译器的include中的自定义文件后,运行后不会发生改变,原因是没清除缓存------->解决方法:

A.   product的clean

B.   家目录/Library/Developer/Xcode/DerivedData/

③系统的include目录:/usr/include…../usr/local/include

 

3.   C语言模块化编程(多文件开发):

就是多文件(.c文件)编程,一个.C文件和一个.h文件可以被称为一个模块

1)        .c      c语言的源文件

2)        .h      (header)头文件

①          方法的声明,但是不能实现方法

②          声明变量

③          声明结构体

好处:

1)        用的时候,只需要包含.h文件,对外隐藏源文件的实现

2)        团队的分工和协作

3)        可以把功能细化分若干个模块

 

4.   多文件开发的实现和注意事项

1)        新建.h文件开头语句为条件编译,防止重复包含

2)        头文件多次包含只有一次有效

5.   进制

1)        数位:代表从右数的位数,从零开始数

2)        基数:几进制基数就是几

3)        位权:代表该位的值要乘以多少,比如二进制0b101,三个数位的权值从左到右分别为10^2,10^1,10^0;

4)        数码:代表该位的值

6.   机器数和真值

1)        机器数指二进制序列,机器数是带符号的,最高位为1表示负数,为0表示正数

2)        真值是指机器数代表的十进制数

7.   原码、反码、补码

数据在计算机内部是以补码的形式存储的

1)        原码:符号位加上真值的绝对值,一个字节表示的范围-127~127

2)        反码:正数的反码就是原码,负数的原码的符号位不变,其余各位取反

3)        补码:正数的补码就是原码,负数的补码是原码的符号位不变,其余位取反加1,一个字节表示的范围为-128~127

 

8.   位运算符

1)        &:按位与

2)        |:按位或

3)        ~:按位取反

4)        ^:按位异或,相同为0,不同为1

5)        >>:右移位,左边补符号位,右移几位就除以2的几次方

6)        <<:左移位,右边补0,左移几位就乘以2的几次方,可能会改变符号

7)        应用:通过&来获取某个数的每一位的值,或者把某一位设置为0或1

8)        通过移位及和1进行&来获取每一位的值,以便进行进制转换

10进制转换为二进制

void tenTo2(int n){
	//获取该数n的长度
	int len = sizeof(n)*8;
	for(int i=len-1;i>=0;i--){
		//进行移位操作
		int temp = n;
		temp = temp >> 1;
		//和1进行按位与操作
		int result = temp & 1;
		printf("%d",result);
	}
	printf("\n");
}


9.   交换两个变量的值

1)        通过&1来判断数的奇偶性

//判断一个数的奇偶性
void jiOu(int n){
  if(n&1){
        printf("奇数\n");
    }else{
        printf("偶数\n");
    }
}


2)        交换两个变量的值

 

①  //使用第三个变量
void huHuan1(int x,int y){
    int temp;
    temp = x;
    x = y;
    y = temp;
    printf("x = %d,y = %d\n",x,y);
}
②  //通过异或操作
void huHuan2(int x,int y){
    x = x^y;
    y = x^y;
    x = x^y;
    printf("x = %d,y = %d\n",x,y);
  }
 


10. 变量地址获取和存储

1)        通过&变量来获取变量的地址:&P--->获取P的首地址

2)        先定义的变量存储在高地址,后定义的变量存储在低地址,连续定义变量不一定连续存储

3)        内存中高位字节存储在高地址,低位字节存储在低地址

11. 获取变量在内存中的每一个字节的值

使用指针存储变量的地址,通过指针+1操作获取每个字节的值

char *p = &num;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bright1st

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值