Javascript 浮点数

2021-05-28 02:02

阅读:355

标签:函数   查错   一点   缺点   exce   符号   script   整数   return   

在复习归并排序的时候,使用到了递归,我一直以为是递归函数没写对,导致了Maximum call stack size exceeded 栈溢出,但是其实是JavaScript浮点数的自动转换的问题!

function sort(arry,left,right){
   if(left === right){
      return;
   }
   let mid=left+(right-left)/2;
   sort(arry,left,mid);
   sort(arry,mid+1,right);
   merge(arry,left,mid,right)
}

let mid=left+(right-left)/2;
mid可能是小数,也可能是整数。
出现这个错误的原因,是自己没有理解JavaScript语言底层!因为刚刚写了java版,直接想当然的以为是int,自动舍去小数!

笔记

JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。

1===1.0 //true!!

JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。容易造成混淆的是,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算。

位运算

位运算符直接处理每一个比特位(bit),所以是非常底层的运算,好处是速度极快,缺点是很不直观,许多场合不能使用它们,否则会使代码难以理解和查错。

有一点需要特别注意,位运算符只对整数起作用,如果一个运算子不是整数,会自动转为整数后再执行。另外,虽然在 JavaScript 内部,数值都是以64位浮点数的形式储存,但是做位运算的时候,是以32位带符号的整数进行运算的,并且返回值也是一个32位带符号的整数

(未完待续)

Javascript 浮点数

标签:函数   查错   一点   缺点   exce   符号   script   整数   return   

原文地址:https://www.cnblogs.com/My-Coding-Life/p/14806361.html


评论


亲,登录后才可以留言!