美文网首页
2019-01-02

2019-01-02

作者: 百而所思 | 来源:发表于2019-01-02 17:41 被阅读0次

    Day7

    一、 进制

    在计算机编程中,整数可以通过十进制,二进制,八进制和十六进制来表示

    1、 十进制

    基数:0,1,2,3,4,5,6,7,8,9,
    进位:逢十进一
    位权:123 = 100 + 20 +3 = 1 * 10^2 + 2 * 10^1 + 3 * 10^0

    2、 二进制

    基数: 0,1
    进位:逢二进一
    位权: 100 = 1 * 2^2 + 0 * 2^1 + 0 * 2^0 = 5

    3、 八进制

    基数:0,1,2,3,4,5,6,7
    进位:逢八进一
    位权: 123(8) = 1 * 8^2 + 2 * 8^1 + 3 * 8^0 = 83

    4、 十六进制

    基数:0,1,2,3,4,5,6,7,8,9,a(10),b(11),c(12),d(13),e(14),f(15)
    进位:逢16进1
    位权:123(16) = 1 * 16^2 + 2 * 16^1 + 3 * 16^0 = 291

    5、 程序中怎么表示不同进制的数

    a. 在程序中直接的数字都是十进制
    b. 0b+二进制数
    c. 0o+八进制数
    d. 0x+十六进制数

    num = 1
    num = 0b1
    num = 0o1
    num = 0x1
    num = 100
    print('十进制:%d,二进制:%s,八进制:%s,十六进制:%s, 将十进制转换为Unicode:%s' % (num, bin(num), oct(num), hex(num), chr(num)))
    #十进制:100,二进制:0b1100100,八进制:0o144,十六进制:0x64, 
    将十进制转换为Unicode:d
    

    二、 位运算

    计算机存储数据只能存储数字数据,而且存的是数字的补码
    计算机对数据进行运算的时候是使用补码进行运算的,将数据从计算机中读出来看到的是原码

    1、 原码

    符号位 + 真值
    说明:
    符号位: 最高为用0表示正数,1表示负数
    真值:去掉正负,数字对应的二进制值
    100 的原码:01100100
    -100的原码:11100100

    2、 反码

    正数的反码:就是原码
    负数的反码:原码的符号位不变,其余的位数取反(0->1,1->0)
    100的反码:01100100
    -100的反码:10011011

    3、 补码

    正数的补码:就是原码
    负数的补码:反码+1
    100的补码:01100100
    -100的补码:10011100

    -50的原码,反码,补码
    原码:10110010
    反码:11001101
    补码:11001110

    4、 为什么计算机要存补码

    因为计算机中只有加法器,没有减法器
    位运算:&(按位与),|(按位或),~(按位取反),^(按位异或),>>(右移),<<(左移动)

    数字1 & 数字2 --> 每一位上的数是都为1结果就是1,有0就是0
    0111(补) & 1101(补) --> 0101(补)
    一个为上的数如果和1与,可以保留这个为上的数;和0与可以置0
    应用:判断奇偶性,如果哟个数的二级制的最低位是1就是奇数,否则是偶数
    数字 & 1 == 1 ->数字就奇数

    print(3 & 2)
    # 0011 & 0010 = 0010
    print(-3 & -2)
    # -3 : 1011 - > 1100 -> 1101
    # -2 : 1010 - > 1101 -> 1110
    # 1101 & 1110 = 1100 -> 1011 -> 1100
    

    数字1 | 数字2: 只要有1结果就是1,两个都为0结果才是0
    1 | 1 = 1
    1 | 0 = 1
    0 | 1 = 1
    0 | 0 = 0
    特点:和1或,置1

    ~数字 : 将数字上的每一位取反
    ~1 = 0
    ~0 = 1

    数字1 ^ 数字2 : 相同为0,不同为0
    1 ^ 1 = 0
    1 ^ 0 = 1
    0 ^ 1 = 1
    0 ^ 0 = 0
    应用:判断两个数是否相等。

    数字1 << N :数字1左移N位,数字1 * 2**N
    数字1 >> N :数字1右移N位,数字1 / (2 ** N)
    应用:快速乘除2的倍数

    相关文章

      网友评论

          本文标题:2019-01-02

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