bit: 数据是以字节位单位,数据传输是以为单位,一个位就代表一个0或1,每8个bit组成一个字节,最小的一级的信息单位
byte:(字节), 是计算机系统中最小的存储单位,byte是计算机记忆体存储资料的基本单位。
byte = 8 bit
word : 由一个或多个字节构成,计算机进行数据处理时,一次存取加工和传送的数据长度称为字
word = 2
byte

  1. let str = '110101'
  2. let r = 1 * 10 ** 0
  3. + 0 * 10 ** 1
  4. + 1 * 10 ** 2
  5. + 0 * 10 ** 3
  6. + 1 * 10 ** 4
  7. + 1 * 10 ** 5

位权:指数制中每一固定位置对应的单位值

十进制

-> 2


globalThis.form10Into2 = function (target: number) {
  let stack = [] as number[];
  while (target > 0) {
    stack.push(target % 2)
    target = target / 2 >> 0
  }
  return stack.reverse().join("-")
}

-> 8


globalThis.form10Into8 = function (target: number) {
  let stack = [];
  while (target > 0) {
    stack.push(target % 8)
    target = target / 8 >> 0
  }
  return stack.reverse().join("-")
}

-> 16


const map16 = {
  10: 'a',
  11: 'b',
  12: 'c',
  13: 'd',
  14: 'e',
  15: 'f',
}
globalThis.form10Into16 = function (target: number): string {
  let stack = [];
  while (target > 0) {
    stack.push(target % 16)
    target = target / 16 >> 0
  }
  return stack.reverse().map(num => num >= 10 ? map16[num] : num).join("-")
}

二进制

-> 10

globalThis.form2Into10 = function (target: string) {
  let res = 0;
  let stack = target.split("")
  let len = stack.length-1;
  for (let i = 0 ;i < stack.length; i++) {
    res += parseInt(stack[i]) * 2 ** (len-i)
  }
  return res;
}

->16


const map2Into16 = {
  "0000":0,
  "0001":1,
  "0010":2,
  "0011":3,
  "0100":4,
  "0101":5,
  "0110":6,
  "0111":7,
  "1000":8,
  "1001":9,
  "1010":'a',
  "1011":'b',
  "1100":'c',
  "1101":'d',
  "1110":'e',
  "1111":"f"
} as Record<string, string|number>

globalThis.form2Into16 = function (target: string) {
  let i = Math.abs((target.length % 4) - 4)
  while (i > 0) {
    target = "0" + target
    i--
  }
  let r = "", temp = ""
  for (let i = 0; i < target.length; i++) {
    const el = target[i];
    temp += el;
    if (temp.length === 4) {
      r += map2Into16[temp]
      temp = ""
    }
  }
  return r;
}

->8

const map8 = {
  "000": 0,
  "001": 1,
  "010": 2,
  "011": 3,
  "100": 4,
  "101": 5,
  "110": 6,
  "111": 7
}

globalThis.form2Into8 = (target: string) => {
  let i = Math.abs((target.length % 3) - 3)
  while (i > 0) {
    target = "0" + target
    i--
  }
  let r = "", temp = ""
  for (let i = 0; i < target.length; i++) {
    const el = target[i];
    temp += el;
    if (temp.length === 3) {
      r += map8[temp]
      temp = ""
    }
  }
  return r;
}

位运算

& 两个位数都为1时,结果才为1
两个位数都为0时,结果才为0
^ 异或 两个位相同为0, 相异为1
~ 取反 0->1, 1-> 0
<< 左移 各二进制位全部左移,高位丢弃,低位补0
>> 右移 各二进制位全部右移,高位丢弃,低位补0

原码

第一个表示符号位,1表示负数, 0表示正数

反码

表示方式时用来处理负数的,符合位置不变,其余位置相反。
正数的反码是其本身,
负数的反码是在其原码的基础上,符号位不变,其余各个位取反

补码

正数的补码是其本身
负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1,(在反码的基础上+1)