美文网首页
进制、位运算

进制、位运算

作者: 有趣的恶魔QAQ | 来源:发表于2019-01-02 18:44 被阅读0次

    知识点整理

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

    一.进制

    • a.十进制
      基数:0-9
      进位:满十进一
      位权:123(10) = 1102 + 2101 + 310*0 = 123

    • b.二进制
      基数:0、1
      进位:逢二进一
      位权:101(2) = 120 + 021 + 12*2 = 5

    • c.八进制
      基数:0-7
      进位:满八进一
      位权:123(8) = 180 + 281 + 38*2 = 83

    • d.十六进制
      基数:数字(0-9),字母(a-f),字母可小写可大写
      进位:逢16进一
      位权:123(16) = 1162 + 2161 + 316*0 = 291

    程序中如何表示不同进制的数

    1.十进制

    num = 110 # 程序中十进制直接写
    print(num)

    2.二进制 (0b+二进制数)

    num = 0b1010001
    print(num)
    print(bin(123)) # 获取123的二进制编码,打印的结果为字符串

    3.八进制 (0o+八进制数)

    num = 0o1233456
    print(num)
    print(oct(123)) # 获取123的八进制编码,打印结果为字符串

    4.十六进制 (0x+十六进制数)

    num = 0x4fa6
    print(num)
    print(hex(123)) # 获取123的十六进制编码,打印结果为字符串

    计算机存储数据存的都是数字数据,而且存的是数字的补码

    计算机对数据进行运算的时候是使用补码进行运算,将数据从计算机中读出来看到的是原码

    • a.原码
      符号位 + 真值(二进制值)
      说明:
      符号位:最高位是0表示正数,用1表示负数
      真值:去掉正负,数字对应的二进制值
      例如:

    100的原码: 01100100
    -100的原码; 11100100

    • b.反码:正数的反码就是原码
      负数的反码,原码的符号位不变,其余位数取反(1变为0,0变为1)

    -100的反码:10011011

    • c.补码:正数的补码就是原码
      负数的补码就是反码+1(逢二进一)

    -100的补码:10011100

    二、位运算

    运算符:&(按位与)、|(按位或)、~(按位取反)、^(按位异或)、>>(右移)、<<(左移)
    • a.按位与运算
      数字1 & 数字2 --> 相同位置两个都为1则为1,有一个为0则为0
      例如:1011(补)& 0110(补)--> 0010(补)

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

    num % 2 == 0 (num是偶数)传统写法
    num & 1 == 0  (num是偶数)
    num & 1 == 1 (num是奇数)
    
    • b.按位或运算
      数字1 | 数字2 --> 有1结果就为1,两个都为0才为0

    1 | 1 = 1
    1 | 0 = 1
    0 | 1 = 1
    0 | 0 = 0

    • c.按位取反
      ~数字:将数字上的每一位取反
      将一个数字取反两次,值则为本身

    ~1 = 0
    ~0 = 1

    • d.按位异或
      数字1 ^ 数字2 :相同为0,不同为1
      应用:判断两个数是否相等

    • e.左移、右移

    数字1 << N:数字1左移N位,相当于数字12*N
    数字1 >> N:数字1右移N位,相当于数字1//2**N

    应用:快速乘2、除以2的多少次方

    相关文章

      网友评论

          本文标题:进制、位运算

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