A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

//----------------#include指令
#include " "
包含的是一个用户定义的文件,可以是头文件,也可是普通文件
1、在当前文件所在的路径下查找
2、如果上面没有找,到编译器include路径查找
3、如果编译器include路径下没有找到,系统的include路径下查找
4、如果上面三个都没有找到就报错了。
当前文件夹 ----->编译器include ---->系统include----->(如果找不 到)报错

#include <>
包含一个系统(编译器自带)的头文件
1、编译器的include路径下查找
2、如果没有找到就系统include路径下查找
3、如果都没有找到就报错
编译器include ---> 系统include--> (如果找不到)报错
include 不一定非要写在第一行

//--------------C语言模块化编程思想
所谓模块化编程(多文件开发),就是多文件(.c文件)编程,一个 .c 文件和一个 .h 文 件可以被称为一个模块。

概念:把相同功能相似的函数封装到不同的文件中

好处:
a.只需要包含.h文件,对外隐藏源文件的实现。
b.方便团队分工和协作
c.可以将不同的功能分装在不同的模块中,方便调用。

1)通过头文件来调用库功能。
2)多文件编译。
3)头文件能加强类型安全检查。


声明在 .h中, 实现在 .c 中


.h  .c名字必须一样

使用条件编译指令可以防止头文件的重复包含

#ifndef C7________xxx_h
#define C7________xxx_h


#endif

//---------------多文件开发注意事项
1)头文件中可以和C程序一样引用其它头文件,可以写预处理块,但不要写具体的语句。
2)可以声明函数,但是不可以定义函数
3)可以声明常量,但不可以定义变量
4)可以“定义”一个宏函数。注意:宏函数很象函数,但却不是函数。其实还是一个申明。
5)结构的定义、自定义数据类型一般也放在头文件中。
6)多文件编程时,只能有一个文件包含 main() 函数,因为一个工程只能有一个入口函数。我们 把包含 main() 函数的文件称为主文件。
7)为了更好的组织各个文件,一般情况下一个 .c 文件对应一个 .h 文件,并且文件名要相同, 例如 fun.c 和 fun.h。
8)头文件要遵守幂等性原则,即可以多次包含相同的头文件,但效果与只包含一次相同
9)防止重复包含的措施

自定义的方法和系统方法的xcode字体颜色不一样

长按cmd点方法,可以跳到头文件查看声明(学习方法)

//--------------进制
是一种计数的方式,数值的表示形式
十进制、二进制、八进制、十六进制

二进制 0、1 逢二进一
书写形式:需要以0b或者0B开头,比如0b101

八进制 0、1、2、3、4、5、6、7 逢八进一
书写形式:在前面加个0,比如045

十六进制 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 逢十六进一
书写形式:在前面加个0x或者0X,比如0x45
16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分 别表示10,11,12,13,14,15。字母不区分大小写。

要素--->数位、基数和位权

数位: 数位是指数码在一个数中所处的位置

76543210
01100100

数码*基数^数位

1*2^0 1*2^1

基数:每个数位上所能使用的数码的个数 (二进制取值0、1基数为2,十进制取值0-9基数为10)
045; //基数8 0b00101101; //基数2 0x520A ; //基数16

位权:位权是指一个固定值 如367 3*10^2 6*10^1 7*10^0

//-------------------------转换

10 -> 2 : 除2取余法,把10进制数除以2,然后取得余数的序列,再倒序
整数部分采取”除2取余法”,小数部分采取“乘2取整法”,高位补0,将得到的余数倒序输出。

2 -> 10 : 所有位的位权相加 101 = 1*2^0+0*2^1+1*2^2

2 --> 16 : 4合1法, 整数部分从右向左 4位结合成一位,小数部分从左向右4位结合1位, 不足部分补0

16 --> 2: 1拆4法, 16进制的1位拆成二进制的4位


//-------------------------------机器数和真值
机器数:
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。
机器数是带符号的,
在计算机 用一个数的最高位存放符号, 正数为0, 负数为1.

真值: //将带符号位的机器数对应的真正数值称为机器数的真值。

因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于 131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

//---------------------------原码,反码,补码
数据在计算机中的存储方法:

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

数据分为有符号数和无符号数

无符号数都为正数,由十进制直接转换到二进制直接存储(其实也是该十进制的补码)即可。

有符号数用在计算机内部是以补码的形式储存的。

( 正数的最高位是符号位0,负数的最高位是 符号位1。
对于正数:反码==补码==原码。 对于负数:反码==除符号位以外的各位取反。补码=反 码+1)

以二进制的补码存储

正数:三码合一

负数:反码 = 源码取反,补码 = 反码+1, 或者 补码 = 源码取反 + 1,
前提都是符号位不变


正数的首位地址为0,其原码是由十进制数转换到的二进制数字

负数的首位地址为1,其原码后面的位也为10进制数转换过去的二进制数字,都是用补码方式表示 有符号数的。


1)原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.

一个数的绝对值的二进制表示

正数:最高位改0
负数:最高位改1

2)反码
反码的表示方法是:

正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.


3)补码
补码的表示方法是:

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)



总结

正数三码合一:

负数:
原码负号位不变,其余个位取反

补码:
原码符号位不变,其余各位取反+1,反码+1

//------------------------------------------------------------------------
1+(-1) = 0

00000000 00000000 00000000 00000001     1 源码
00000000 00000000 00000000 00000001     1 反码
00000000 00000000 00000000 00000001     1 补码



10000000 00000000000000000000000001     -1源码
11111111 11111111 11111111 11111110        -1反码
11111111 11111111 11111111 11111111    - 1补码




00000000 00000000 00000000 00000001          1的补码
11111111 11111111 11111111 11111111   +    -1的补码
----------------------------------------------------------------------------
00000000 00000000 00000000 00000000        0

1(源码) + (-1)(源码) = -2

1(反码) + (-1)(反码) = -0

1(补码) + (-1)(补码) = 0



//-----------------------位运算
位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。
C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的 char,short,int与long类型。

1)& 按位与   口诀: 同1为1,有0为0
只有对应的两个二进位均为1时,结果位才为1,否则为0


2) | 按位或    口诀:有1则1
只要对应的二个二进位有一个为1时,结果位就为1,否则为0

3) ^ 按位异或  口诀:同0非1
当对应的二进位相异(不相同)时,结果为1,否则为0

4)~ 取反
各二进位进行取反(0变1,1变0)

以上都是在二进制进行运算




1)<<  左移

1、各二进位全部左移n位,高位丢弃,低位补0

1)左移可能会改变一个数的正负性

2)左移1位相当于*2^n

举例:快速计算一个数乘以2的n次方
(8<<3 等同于8*2^3)


2)>> 右移
各二进位全部右移n位,保持符号位不变
x >> n
x的所有二进制位向右移动n位,移出的位删掉,移进的位补符号位

1、右移不会改变一个数的符号
2  右移 n 位就相当于/2^n
用途:快速计算一个数除以2的n次方 (8>>3 等同于8/2^3)

技巧:
1)任何数和1进行&操作,得到这个数的最低位
2)想把某一位置0,就让它某一位置与0进行&运算



理解:
1)编程实现10进制转2进制
// 每次取 一个数的最后一个二进制位  >>(31-i)
// 任何一个数和1进行&(按位与)得到任何一个数的二进制的最后一位
第一次取出符号位


a&1  -->  1  奇数
     -->  0  偶数



1)数学方法:
a = b - a;
b = b - a;
a = b + a;

2)
int temp = 0,a = 1,b = -1;

temp = a;

a = b;

b = temp;



3)实现两个变量值交换

a = a^b;
b = a^b; -->  a^b^b; --> a
a = a^b;-->   a^b^a; --> b

  1001   a
^ 1101   b
----------------------
  0100
^ 1101   b
-----------------------
  1001




//----------------变量地址获取及存储原理
%p 输出一个地址
定义在函数中变量我们称为局部变量,
先分配字节地址大内存,然后分配字节地址小的内存

变量的首地址,是变量所占存储空间字节地址最小的那个地址

低位保存在低地址字节上,高位保存在高地址字节上






7 个回复

正序浏览
记得不错  加油  
回复 使用道具 举报
这不是第七天讲的么
回复 使用道具 举报
赞一个。
回复 使用道具 举报
谢谢啦,么么哒
回复 使用道具 举报
楼主好人,谢谢楼主啦
回复 使用道具 举报
是基础班的吗?
回复 使用道具 举报
谢谢楼主啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马