1 进制表示方法

  1. 二进制
  2. 十进制
  3. 八进制

0(零)开头,后边正常显示,如 023表示八进制的23,对应十进制的28+31=19

  1. 十六机制

0x开头,x不区分大小写;如:0x12就是十六进制的12,对应十进制的116+21=18

2 进制转换

1 其他进制转十进制

1 二进制转十进制

从右往左,逐位计算 位值1*2``(位数1-1)``+位置2*2``(位数2-1)``+...+位置n*2``(位数n-1)

2 八进制转十进制

从右往左,逐位计算 位值1*8``(位数1-1)``+位置2*8``(位数2-1)``+...+位置n*8``(位数n-1)

3 十六进制转十进制

从右往左,逐位计算 位值1*16``(位数1-1)``+位置2*16``(位数2-1)``+...+位置16*16``(位数n-1)

2 十进制转其他进制

1 十进制转成二进制

规则:讲该十进制数除以2,直到商为0为止,然后将步得到的余数倒过来;就是对应的二进制;

  1. 56/2 = 14 0
  2. 14/2 = 7 0
  3. 7/2 = 3 1
  4. 3/2 = 1 1
  5. 1/2 = 0 1
  6. 结果就是 11100

2 十进制转成八进制

规则:讲该十进制数除以8,直到商为0为止,然后将步得到的余数倒过来;就是对应的二进制;

156/8 = 19 余 4
19/8 = 2 余 3
2/8 = 0 余 2

结果就是 0234   开始的零是表示0234是八进制数

3 十进制转成十六进制

同理;

3 二进制转其他进制

1 二进制转八进制

方法一:二进制转成十进制,十进制再转成八进制
方法二:将二进制的数,从右往左开始,每三位数作为一组,将这三位数转成十进制;从右往左三位数一组全部转完就是最终的八进制数了;(三位二进制数的上限是111 对应的就是十进制的7;正好也是八进制的上限7)

二进制 【11010101】 转成八进制
【11    010 101】从右往左每三位数一组
  3        2        5  每三位数转成一个十进制数
加上前缀最终结果就是 0325

2 二进制转成十六进制

方法一:二进制转成十进制,十进制再转成十六进制
方法二:将二进制的数,从右往左开始,每4位数作为一组,将这4位数转成十进制;从右往左4位数一组全部转完就是最终的十六进制数了;(4位二进制数的上限是1111 对应的就是十进制的15;正好也是八进制的上限15)

二进制 【11010101】 转成十六进制
【1101 0101】从右往左每三位数一组
  13            5  每4位数转成一个十进制数
  D                5     转成16进制
加上前缀最终结果就是 0xD5

4 其他进制转二进制

1 八进制转二进制

规则:将八进制的每一位,转成对应的一个3位得二进制数

将八进制得 0237 转成二进制
【0    2        3            7】  逐位转换
        010     011     111
结果就是 010 011 1111

2 十六进制转二进制

规则:将十六进制的每一位,转成对应的一个4位得二进制数

将八进制得 0x237 转成二进制
【0x        2            3            7】  逐位转换
            0010         0011     0111
结果就是 0010 0011 0111

3 原码、反码、补码

网上对原码、反码、补码得解释过于复杂;精简一下就是以下六句话:
对于有符号得数而言:

  1. 二进制得最高位是符号位:0表示正数,1表示负数

1 ==> **0**``000 0001
-1 ==> **1**``000 0001

  1. 正数得原码、反码、补码都一样<br />
  2. 负数的反码:它的符号位不变,其他位取反(0变1,1变0)
  3. 负数的补码:它的反码+1

             1            -1            0
    源码   0000 0001     1000 0001    0000 0000
    反码     0000 0001       1111 1110    0000 0000
    补码   0000 0001       1111 1111    0000 0000
    
  4. 0的反码、补码都是0 (特殊规定)

  5. 在计算机运算的时候,都是以补码的方式来运算的; (负数的二进制都是补码的形式存在的)

上边就是规定,记住就行了,没有任何原理,就是这么规定的; 对于第六条有点懵

疑问:为什么要用补码呢
https://www.bilibili.com/video/BV14J411A77q?spm_id_from=333.337.search-card.all.click&vd_source=8ae02c1de2115d30054396cb4aaec183
归根到底就是为了少制作一个减法器,利用现有的加法器就能够实现减法

4 按位与 &、按位或 |、按位异或 ^

按位与 & : 两位同时为1,则结果返回1,否则返回0;
按位或 | : 两位只要有1,则返回1,否则返回0;
0|0=0;0|1=1;1|0=1;1|1=1(有1则1)
按位异或 ^ : 两位的值不相同(即:一个为1一个为0)则返回1,否则返回0
0``0=0;0``1=1;1``0=1;1``1=0;(同0异1)