美文网首页
Day_07-进制与位运算

Day_07-进制与位运算

作者: 两只小猪呼噜噜_1539 | 来源:发表于2019-01-02 19:51 被阅读0次

    一、进制

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

    a.十进制
    基数:0,1,2,3,4,5,6,7,8,9
    进位:逢十进一
    位权:10的n次方,每位数的代表的含义

    b.二进制
    基数:0,1
    进位:逢二进一
    位权:2的n次方,每位数代表的含义

    c.八进制
    基数:0,1,2,3,4,5,6,7
    进位:逢八进一
    位权:123(8) = 3+16+64 = 83
    8的n次方,每位数代表的含义

    d.十六进制
    基数:09,af(大小写均可),从小到大分别对应10,11,12,13,14,15
    位权:逢十六进一
    位权:16的n次方,每位数表示的含义

    1. 程序中怎么表示不同进制的数

    在程序中直接写的数字都是10进制

    num = 10  # 这是一个10进制数
    print(num)    # 直接打印其他进制数就会显示他的十进制
    

    a.二进制
    写法0b/0B + 二进制数

    num = 0b1110  # 每位上必须是二进制数
    print(num)
    print(bin(800))  # 获取一个数对应的二进制表示方式
    # num2 = 0b23   # SyntaxError: invalid token
    

    b.八进制
    写法0o/0O + 八进制数

    num = 0o134  # 每位上必须是八进制数
    print(num)
    print(oct(800))
    # num = 0o78   # SyntaxError: invalid syntax
    

    c.十六进制
    写法0x/0X+十六进制数

    num = 0xaf2   # 每位上必须是十六进制数
    print(num)
    print(hex(19968))
    print(hex(255))
    # num = 0xd23h  # SyntaxError: invalid syntax
    

    注意
    输入:一个数字(可以是任何进制数)
    输出:字符串

    二、位运算

    计算机储存数据只能储存数字数据,而且是数字的补码,运算的是使用补码来进行运算

    1.原码
    符号位+真值
    说明
    符号位:最高位是0,表示一个正数1表示负数
    真值去掉正负符号,数字对应的二级制值
    2.反码
    正数:就是原码(本身)
    负数:符号位不变,其余的位数取反(0变1,1变0)
    即对负数才有此要求

    3.补码
    正数:还是原码(本身)
    负数:在反码的基础上+1
    反码的存在是为了求补码

    4.为什么计算机要存补码?
    原因:计算机里只有加法器,没有减法器

    5.位运算有哪些?
    &(按位与),|(按位或),^(按位异或),~(按位取反),<<(左移),>>(右移)
    a.&(按位与)
    数字1 & 数字2
    说明:每位上有0就是0,没0就是1
    特点
    一个数与1与,保留这个数
    一个数与0与,置0

    应用:判断一个数的奇偶性(如果一个数的二进制的最低位是1就是奇数,否则就是偶数)

    num & 1 == 0 -->num是偶数
    num & 1 == 1 -->num是奇数

    print(2 & 1, 200 & 1, -100 & 1)   # 0 0 0
    print(3 & 1, 5 & 1, 101 & 1)  # 1 1 1 
    print(3 & 2)   # 0011 & 0010  = 0010(补)
    

    b.|(按位或)
    数字1 | 数字2
    说明:每位上有1就是1,没1就是0
    特点:与1或,就置1

    print(3 | 2)  # 3
    print(-3 | 2)  # -1
    

    c.~(按位取反)
    单目运算符
    ~数字:将数字上的每一位取反
    ~ 1 = 0
    ~ 0 = 1
    应用:加密运算
    特点:取反两次就是它本身

    print(~3)  # -4
    print(~-4)  # ~~3 = 3 取反两次就是它本身
    

    d.^(按位异或)
    数字1 ^ 数字2
    说明:相同为0,不同为1
    1 ^ 1 = 0
    1 ^ 0 = 1
    0 ^ 1 = 1
    0 ^ 0 = 0
    应用:1.加密
    2.两个数是否相等
    相等:异或为0
    不等:异或为1

    print(3 ^ 2)  # 2是密码,3是明文
    print(1 ^ 2)  # 1是密文,2是密码,得到明文
    

    e.<< (左移)
    数字1 << n
    说明:数字1左移n位,相当于数字1 * 2**n
    f. >> (右移)
    数字1 >> n
    说明:数字1右移n位,相当于数字1 // 2**n
    应用:快速的进行除2的次方或者乘2的次方(底层运算,执行效率高)

    print(4 << 1)   # 8 == 4 * 2**1
    print(-3 << 2)   # -12 == -3*2**2
    print(5 >> 1)   # 2 == 5//2**1
    print(5 >> 2)   # 1 == 5//2**2
    

    相关文章

      网友评论

          本文标题:Day_07-进制与位运算

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