您的位置:首页 > 其它

进制

2015-12-31 15:23 288 查看
//----------------#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 输出一个地址
定义在函数中变量我们称为局部变量,
先分配字节地址大内存,然后分配字节地址小的内存

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

低位保存在低地址字节上,高位保存在高地址字节上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: