1.计算机中的数值表示  # 
1.1 基数R  # 
- R代表基本数码的个数
 
- R进制的主要特点是逢R进1
 
- 基数R的数制称为R进制数
 
| R | 
进制 | 
数码符号 | 
进制规则 | 
| R=2 | 
二进制数(2) | 
0、1 | 
逢2进1 | 
| R=10 | 
十进制数(10) | 
0 ~ 9 | 
逢10进1 | 
1.2 位权Wi  # 
- 位权Wi是指第i位上的数码的权重值,位权与数码所处的位置i有关
 
- 例如 R=10(十进制数),各个数码的权为10^i,  i表示数码所处的位置
 
- 个位i=0,位权是10^0=1
 
- 十位i=1,位权是10^1=10
 
- (22.22)10=2x101+2x100+2x10-1+2x10-2
 
| R | 
进制 | 
数码符号 | 
进制规则 | 
位权Wi | 
例子 | 
| R=2 | 
二进制数(2) | 
0、1 | 
逢2进1 | 
2 | 
(11.11)2 | 
| R=10 | 
十进制数(10) | 
0 ~ 9 | 
逢10进1 | 
10 | 
(99.99)10 | 
2.进制转换  # 
2.1 二进制转十进制  # 
- 方法: 按权展开,加权求和,以(111.11)2为例 
 

2.2 十进制转二进制  # 
- 整数部分: 除2取余,直到商为0,最先得到的余数是最低位,最后得到的余数是最高位.
 
- 小数部分: 乘2取整,直到积为0或者达到精度要求为止,最先得到的整数是高位
 
- 例如 (7.75)10=(111.11)2
 


3. 计算机中的数据  # 
3.1 无符号数据的表示  # 
- 原码: 3个bit能表示8个数 0 1 2 3 4 5 6 7
 

3.2 有符号数据的表示  # 
3.2.1 原码  # 
- 原码: 3个bit能表示8个数 +0 +1 +2 +3 -0 -1 -2 -3
 
- 符号: 用0、1表示正负号,放在数值的最高位
 

3.2.2 反码  # 

3.2.3 补码  # 


4. 小数  # 
4.1 小数点表示  # 
- 在计算机中,小数点及其位置是隐含规定的,小数点并不占用存储空间
 
- 定点数: 小数点的位置是固定不变的
 
- 浮点数:小数点的位置是会变化的
 
4.2 定点小数  # 
- 定点小数: 小数点隐含固定在最高数据位的左边,整数位则用于表示符号位,用于表示纯小数.
例如: (0.110011)2
 

4.3 定点整数  # 
- 定点整数: 小数点位置隐含固定在最低位之后,最高位为符号位,用于表示纯整数.
 
- 例如: (0110011.)2
 

4.3 浮点数  # 
- 对于既不是定点整数,也不是定点小数的数用浮点数表示
 
- 在计算机中通常把浮点数N分成阶码和尾数两部分来表示
 
- 小数点位置由阶码规定,因此是浮动的
 
- N=尾数*基数阶码,基中尾数是一个规格化的纯小数
 
- 例如8位系统中,阶码占3位,尾数占3位,数符和阶符各占1位
 
- (3.5)10=(11.1)2=0.111*210
 
- 科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式,可以节约空间和时间
 
- 例如:(1≤|a|<10,n为整数),比如 1100= 1.1x103
 
5.IEEE754标准  # 
- JavaScript采用的是双精度(64位)
 
- 符号位决定了一个数的正负,指数部分决定了数值的大小,小数有效位部分决定了数值的精度
 
- 一个数在 JavaScript 内部实际的表示形式    (-1)符号位1.有效位2指数位
 
- 精度最多53个二进制位, -(253-1)到253-1
 
- 指数部分最大值是 2017(211-1),分一半表示负数,JavaScript能够表示的数值范围是21024~2-102
 


6. 0.1+0.2 != 0.3  # 
7.JS大数相加  # 
let numA = "1234567890",numB = "123456789";
let numAArray = numA.split("").map((item) => parseInt(item)).reverse();
let numBArray = numB.split("").map((item) => parseInt(item)).reverse();
let sum = [].fill(0,0,(numA.length >= numB.length ? numA.length : numB.length) + 1);
for (let i = 0; i < numAArray.length; i++) {
  sum[i] = numAArray[i];
}
let up = 0;
for (let i = 0; i < numBArray.length; i++) {
  sum[i] = sum[i] + numBArray[i] + up;
  if (sum[i] > 9) {
    sum[i] = sum[i] % 10;
    up = 1;
  } else {
    up = 0;
  }
}
if (sum[sum.length - 1] == 0) {sum.pop()}
let result = sum.reverse().join("");
console.log(Number(numA) + Number(numB));
console.log(result);