【计算机组成原理学习Day01】进制转换及运算

  • 进制
    1)常用的进位计数法有二进制、八进制、十进制和十六进制,进位计数法是一种计数的方法。
    2)生活中常用十进制数,计算机常用二进制、八进制及十六进制数。
    • 二进制
      满2进1,go语言中,如var i int = 5,二进制表示 101

    • 八进制
      满8进1,go语言中,如var j int = 9,八进制表示 011

    • 十六进制
      满16进1,go语言中,如var k int = 17,十六进制表示 0x11
      ps:0-9及A-F,10:A,以此类推,A、B、C、D、E、F

    • 进制转换【计算机组成原理学习Day01】进制转换及运算_第1张图片
      其他进制数转十进制需遵循规则:从最低为开始,将每个位上的数提取出来,乘以相应进制的(位数-1)次方

      • 二进制转十进制
        二进制:101
        十进制:1 * 1+ 0 * 2 + 1 * 4=5
      • 八进制转十进制
        八进制:123
        十进制:3 * 1 + 2 * 8 + 1 * 64 = 83
      • 十六进制转十进制
        十六进制:0x34A
        十进制:10 * 1 + 16 * 4 + 3 * 256 = 10 + 64 + 768 = 842

      十进制数转其他进制数需遵循规则:将该数不断除以2,直到商为0为止,将每步得到的余数倒置

      • 十进制转二进制
        十进制:56
        二进制:111000
        56 / 2 = 28 ··· 0
        28 / 2 = 14 ··· 0
        14 / 2 = 7 ··· 0
        7 / 2 = 3 ··· 1
        3 / 2 = 1 ··· 1
        1 / 2 = 0 ··· 1
      • 十进制转八进制
        十进制:156
        八进制:0234(go语言中,八进制以0开头)
        156 / 8 = 19 ··· 4
        19 / 8 = 2 ··· 3
        2 / 8 = 0 .···2
      • 十进制转十六进制
        十进制:356
        十六进制:0x164(go语言中,十六进制以0x或0X开头)
        356 / 16 = 22 ··· 4
        22 / 16 = 1 ··· 6
        1 / 16 = 0 ··· 1

      二进制转其他进制,从低位向高位取,八进制取三位作为一组,十六进制取四位作为一组,按照二进制(1 2 4 8)进行相加求和,倒置组装

      • 二进制转八进制
        二进制:11010101
        八进制:0325
        101 => 5
        010 => 2
        011 => 3(高位不足拿0凑三位)
      • 二进制转十六进制
        二进制:11010101
        十六进制:0xD5
        0101:5
        1101:D

      其他进制转二进制,每位代表一组,八进制一组为三位,十六进制一组为四位,按照二进制(1 2 4 8)进行求和相加,结果等于其位值,高位到地位依次排列

      • 八进制转二进制
        八进制:0237
        二进制:010011111
        7 => 111
        3 => 011
        2 => 010
      • 十六进制转二进制
        十六进制:0x237
        二进制:001000110111
        7 => 0111
        3 => 0011
        2 => 0010
  • 位运算
    1)在计算机中参与运算的机器数有两类:有符号数和无符号数
    • 有符号数
      在机器中,数的“正”和“负”号是无法识别的,有符号数用"0"表示"正"号,用”1“表示”负“号,从而将符号也数值化,并通常约定二进制数的最高位为符号位,即将符号放在有效数字的前面,组成有符号数。

      • 原码、反码、补码
        1)二进制的最高位是符号位:0表示正数,1表示负号
        1 => [0000 0001]
        -1 => [1000 0001]
        2)正数的原码,反码.补码都一样
        3)负数的反码=它的原码符号位不变,其他位取反
        4)负数的补码 = 它的反码 + 1
        1 => 原码 [0000 0001] 反码[0000 0001] 补码[0000 0001]
        -1 => 原码 [1000 0001] 反码[1111 1110] 补码[1111 1111]
        5)0的反码,补码都是0
        6)在计算机运算的时候,都是以补码的方式来运算的
    • 无符号数
      指整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。若机器字长为8位,则数的表示范围为0 ~ 2 ^ 8 - 1,即0 ~ 255

    • 位运算符(与 &、或 |、异或 ^)
      Golang中的3个位运算

      • 按位与 &
        两位全为1,结果为1,否则为0
        如:2 & 3
        => 1 0 & 1 1
        => 1 0 ==> 2
      • 按位或 |
        两位有一个为1,结果即为1,否则为0
        如:2 & 3
        => 1 0 & 1 1
        => 1 1 ==> 3
      • 按位异或
        两位一个为1,一个为0,结果为1,否则为0
        如:2 & 3
        => 1 0 & 1 1
        => 0 1 ==> 1
    • 移位运算
      左移 (<<)、右移(>>)

      • 在GoLang中,有左移运算符(<<)和右移运算符(>>)
        • 左移运算符(<<)
          如:a := 1 << 2 // 0 0 0 0 0 0 0 1 ==> 0 0 0 0 0 1 0 0 => 4
          规则:符号位不变,低位补0
        • 右移运算符(>>)
          如:a := 1 >> 2 // 0 0 0 0 0 0 0 1 ==> 0 0 0 0 0 0 0 0 => 0
          规则:低位溢出,符号位不变,并用符号位补齐溢出的高位

你可能感兴趣的:(【计算机组成原理】)