zoukankan      html  css  js  c++  java
  • 进制

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

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

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

  • 相关阅读:
    模拟ORA-26040: Data block was loaded using the NOLOGGING option
    poj 2752 Seek the Name, Seek the Fame (KMP纯模版)
    一入python深似海--变量和对象
    Codeforces 448 C. Painting Fence
    Unix网络编程 高级IO套接字设置超时
    [ JavaScript ] JavaScript 实现继承.
    讲座:与迷茫为友的成长
    分享:进化版动漫更新提醒(微信及软件)
    设计模式------模板方法模式
    BasePath问题-nginx负载均衡配置
  • 原文地址:https://www.cnblogs.com/jiayongqiang/p/5091857.html
Copyright © 2011-2022 走看看