看段js代码:
console.log(0.1 * 10);
console.log(0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1);
console.log(0.2 + 0.4);
console.log(010 + '010');
整数(8bit)的表示范围是多少?
-2^7 到 2^7 - 1, 也就是 -128 到 +127
abs(x) := (x >= 0) ? x : -x
翻译过来就是,x的绝对值定义为:正数和0的绝对值等于它自己,负数的绝对值等于-x。(这里使用的是-x,而没有用0-x,因为在浮点数中,这两者是有区别的。)
深入 -x
学过计算机原理的都知道,负数在计算机中以补码形式存储,计算补码的方式和取反操作类似。
符号位不变,其它位取反,最后加一
绝对值等于自己的数有两个,0 和最小的负数
为什么要+1,因为不是平分的,非负数还有个0
比如 -5
原码: 1000,0101
其它位取反: 1111,1010
加一: 1111,1011
如何取绝对值:
补码: 1111,1011 这是-5在计算机中的表示
各位取反: 0000,0100
加一: 0000,0101 此时结果为+5
现在我们回到最小的负数问题,最小的负数在计算机中表示为 1000,000,下面我们对这个数操作:
补码: 1000,0000 //-128
各位取反: 0111,1111
加一: 1000,0000
浮点数
N bit可以表示的信息量是 2^N
问:要把小数装入计算机,总共分几步?你猜对了,3 步。
第一步:转换成二进制
第二步:用二进制科学计算法表示
第三步:表示成 IEEE 754 形式
在上面的第一步和第三步都有可能 丢失精度。
精度是如何丢失的 http://justjavac.com/codepuzzle/2012/11/11/codepuzzle-float-who-stole-your-accuracy.html