typeof类型:
"undefined""object""number""string":utf-16两个字节为一个unite"boolean""function"
number类型: 双精度64位
可以表示2^64-2^53+3个数1)正无穷 负无穷2)0,-03)正数4)NaN
双精度64位
63 62…….52 51 20 ……0 1 11111111 1111…1111 1位符号位sign + 11位指数位e + 52位小数位f S*E*F S=(-1)^sign……(-1)^0或(-1)^1 1)正负无穷:11指数位全为1,52位是0 2)NaN: 11指数位全为1,52位不全为0 1)+2)=3(被1位符号位 52位f位控制,E位不变,应该有2^53种,但是不同的nan) 总共=2^64-2^53+3 3)0,-0: 11指数位全为0,52位全为0 4)11指数位全为0,f不全为0:denormal 表示0~1之间的数,不包括1,不包括0 E=2^(-1022); F=0.52位二进制 =0+b(52-1)*2^(-1)+…b(0-52) *2^-52 =0+1/2+1/4+1/8+…+1/2^52(f全为1的例子); 0~1之间很小的间距,指数E与normal情况下最小E一致,2^(1-1023)=2^-1022 每两个小数之间的差最小为=比如f位只有一个1与f位为0(非denormal值)的差 =1*2^-1022*(0+2^-52) - 1*2^-1022 * (0+0) =2^-1074 denormal最小值=1*2^-1022*(0+2^-52)=2^-1074 5)11指数位有0有1:normal 表示>=1的数 E=2^(e-1023); e=b(52+0) * 2^0+b(52+1) *2^1+…+b(52+7)*2^10 F=1.52位二进制 =1+b(52-1)*2^(-1)+…b(0-52) *2^-52 =1+1/2+1/4+1/8+…+1/2^52(f全为1的例子); normal最小值=1*2^(1-1023)*(1+0)=2^-1022;
单精度32位(假如JS用单精度32位表示number,情况如下)
31 30…….23 22 21 ……0 1 11111111 1111…1111 1位符号位sign+8位指数位e+23位小数位f S*E*F S=(-1)^sign……(-1)^0或(-1)^1 1)正负无穷:8指数位全为1,23位是0 2)NaN: 8指数位全为1,23位不全为0 1)+2)=3(被1位符号位 23位f位控制,E位不变,应该有2^24种,但是不同的nan) 总共=2^32-2^24+3 3)0,-0: 8指数位全为0,23位全为0 4)8指数位全为0,f不全为0:denormal 表示0~1之间的数,不包括1,不包括0 E=2^(-126); F=0.23位二进制 =0+b(23-1)*2^(-1)+…b(0-23) *2^-23 =0+1/2+1/4+1/8+…+1/2^23(f全为1的例子); 0~1之间很小的间距,指数E与normal情况下最小E一致,2^(1-127)=2^-126 每两个小数之间的差最小为=比如f位只有一个1与f位为0(非denormal值)的差 =1*2^-126*(0+2^-23) - 1*2^-126 * (0+0) =2^-149 denormal最小值=1*2^-126*(0+2^-23)=2^-149 5)8指数位有0有1:normal 表示>=1的数 E=2^(e-127); e=b(23+0) * 2^0+b(23+1) *2^1+…+b(23+7)*2^7 F=1.23位二进制 =1+b(23-1)*2^(-1)+…b(0-23) *2^-23 =1+1/2+1/4+1/8+…+1/2^23(f全为1的例子); normal最小值=1*2^(1-127)*(1+0)=2^-126;