美文网首页
进制转换

进制转换

作者: MarkTang | 来源:发表于2016-01-09 00:25 被阅读281次

    二进制 逢二进一
    自己归零 前面进一位

    十进制:12
    二进制:1100(逢二进一)
    八进制:14(逢八进一)
    十六进制 :(逢十六进一)

    表示二进制 0b
    八进制 0
    十六进制 0x

    输出 八进制%o 十六进制 %x

    二进制转十进制

    从低位数开始,用低位数乘以2的多少次幂,幂数从0开始,然后在相加

    二进制 :1001
    12(0)=1
    0
    2(1)=0
    02(2)=0
    1
    2 (3)= 8

    1 2 4 8 16 32

    二进制转八进制

    三个二进制代表一个八进制位 ,将三个二进制位转换十进制,算出后三位的相加,之后再相连

    二进制转十六进制

    四个二进制位掉膘一个十六进制,只需要将4个二进制转换为10进制,之后再相连

    十进制转 二进制
    除2取余 倒序取出

    N位二进制的取值范围
    1位: 0~1 0~2(n)-1;
    2位 :0~3 0~2(2)-1;
    3位:0~7 0~2(3)-1;

    源码 反码 补码
    存在内存中的是补码

    正数三码合一 一样的

    负数

    源码
    1000 0000 0000 0000 0000 0000 0000 1001
    反码:符号位不变,其他位去反(0变 1 1变0)
    1111 1111 1111 1111 1111 1111 1111
    0110
    补码: 反码 +1
    1111 1111 1111 1111 1111 1111 1111
    0111

    为什么要有原码/补码/反码?
    计算机只会做加法

    1 - 1 ==1+(-1)
    0000 0001原码(反码) 1000 0001

    • 1111 1110 -1 反码 1111 1110
      1111 1111
      —————————— 9
      1111 1111 反码

    将计算出来的反码转换为原码,再将原码转换为十进制
    1000 0000 == 反码 == -1

    1 - 1 ==1+(-1)
    0000 0001 (+1补码)
    1111 1111 (-补码)
    —————————
    (1) 0000 0000 == 0 最前面的1 舍去

    位运算

    & 按位与
    |按位或
    ^ 按位异或
    ~ 取反

    按位与 &
    9& 5 =?
    按二进制运算
    规律:一假则假 1 真 0假
    1001
    & 0101
    ———
    0001 == 1
    规律:任何数和1相& 结果还是那个数
    1001
    & 1111
    ————
    1001

    按位|
    规律: 一真则真

    9| 5 = ?
    1001
    | 0101
    ————
    1101 ==13

    按位异或^
    规律: 不相同位1,相同位0
    9^ 5 = ?
    1001
    ^ 0101
    —————
    1100 == 12

    重点:
    规律:异或的结果和参与运算的顺序没有关系
    9^ 5^6 = ?
    5^ 9 ^ 6 =?
    规律:两个相同的数异或 等于0
    5^5 = ?
    6^6 = ?

    规律:任何一个数异或上0结果不变

    9 ^ 0 = ?
    6 ^0 = ?

    规律:任何一个数异或上同一个数量两次,结果不变
    955 = ?
    5^ 9^5 = ?

    取反 ~

    原码 —》 反码(取反) —》补码(+1)
    补码 —》反码(-1)—》源码(取反)

    正数取反+1的负数
    负数取反-1的正数

    左移 <<
    右移 >>

    规律:左移就是左移的数乘以2的移动次幂
    注意点:
    由于左移运算,被移动的数的最高位会被抛弃(移除),所以左移可能会改变一个数的正负性
    9<<1 = ?
    0000 0000 0000 0000 0000 0000 0000 1001

    右移 >>

    9>>1 =?
    规律:右移就是右移的数除以2的移动次幂
    9 >>1 == 9/2(1) =4
    9>>2 == 9/2(2) ==2

    符号位不变 后面开始移动 根据符号位 补 1 或零
    内存储存细节

    内存储存细节
    只要定义变量,系统就会开辟一块内存空间,内存寻址从大到下
    ,越先定义的变量,内存地址越大。
    变量的得知就是所占的存储空间最小的字节地址
    注意:由于内存寻址是从大到小,所以存储书记也是从大到小的存储(先储存)

    类型说明符

    1.说明长度的(它可以用于修改所三用的存储空间的大小)
    sgort;
    long;
    long long;
    用于说明数据类型,一般情况下和int配合使用
    输出需要 long (%li %ld) short (%hi %hd)

    2.说明符号位(它可以修改符号位)

    unsigned;
    signed;

    //如果给变量加上修饰符signed,代表当前变量的取值可以是整数/负数/零
    //如果给变量加上修饰符signed,就代表把二进制的最高位作为符号位
    //而且默认情况下所有变量都是右符号的(signed)
    signed int num = 0

    //unsigned代表物符号,无符号。无符号就代表当前的取值只能装整数/零
    //如果给变量加上修饰符unsigned,就代表“不”把而精致最高最为符号位
    //如果想打印无符号的变量,只能用 %u

    //不同类型的说明符可以混合使用

    数组基本概念

    数组完全初始化
    int score[3] = {1,3,5};
    数组部分初始化
    int scores[3] = {3,5};

    //注意:如果没有对数组进行初始化(完全和部分),那么不要随便使用数组中的数据,可能是一段垃圾数据(随机值)
    //注意:定义数组的时候,数组的元素不能使用变量,如果使用变量,那么数组中是一些随机值

    相关文章

      网友评论

          本文标题:进制转换

          本文链接:https://www.haomeiwen.com/subject/wsxqkttx.html