bit: 数据是以字节位单位,数据传输是以为单位,一个位就代表一个0或1,每8个bit组成一个字节,最小的一级的信息单位
byte:(字节), 是计算机系统中最小的存储单位,byte是计算机记忆体存储资料的基本单位。
byte = 8 bit
word : 由一个或多个字节构成,计算机进行数据处理时,一次存取加工和传送的数据长度称为字
word = 2 byte
let str = '110101'
let r = 1 * 10 ** 0
+ 0 * 10 ** 1
+ 1 * 10 ** 2
+ 0 * 10 ** 3
+ 1 * 10 ** 4
+ 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)