常用的进制

2023-11-20 14:07:34 浏览数 (1)

常用的进制

  • 2进制:0  1
  • 8进制:0~7
  • 10进制:0~9 (我们平时写代码,写出来的值都是10进制的)
  • 16进制:0~9  A-F
  • ....

如果我们写的值是以“0x”开头的,浏览器认为其是16进制,默认帮我们转换为10进制进行处理;如果写的值是以“0”开始的,浏览器认为其是8进制,也帮助我们默认转换为10进制,剩余写的值,都是按照10进制算的,但是不论咋样,计算机最后都是按照2进制进行存储。

JS使用number类型表示数字(整数和浮点数),遵循 IEEE-754 标准 通过64位二进制值来表示一个数字

代码语言:txt复制
https://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html
代码语言:txt复制
第0位:符号位,0表示正数,1表示负数 S
代码语言:txt复制
第1位到第11位「11位指数」:储存指数部分 E
代码语言:txt复制
第12位到第63位「52位尾数」:储存小数部分(即有效数字)F
代码语言:txt复制
注:尾数部分在规约形式下第一位默认为1(省略不写)

十进制decimal 转 二进制binary

整数转二进制

用十进制的值一直除以2,直到商为0结束,把每一次取到的余数,从末尾到开始串起来即可。

number.toString(radix); 把一个十进制数字转换为radix进制的字符串,如果不写radix,默认是10进制

浮点数转二进制

用十进制浮点数乘以2,每一次取整数部分,把剩下的小数部分继续乘以2...直到乘积是1,没有小数为止。

很多时候会出现无限循环,但是计算机存储二进制最长64位,超出的部分会自动去掉。换句话说,就是计算机底层储存的浮点数的二进制值不一定准确,有可能是省略后的结果。

有一个特例如下:

代码语言:txt复制
console.log(0.1   0.2 == 0.3);//false

console.log(0.1 0.2);
//0.30000000000000004 != 0.3 因此fasle

console.log(0.1   0.3 == 0.4);//true

浏览器最多能储存16位十进制

上面例子的解决方法:浮点数转化为整数,即两个浮点数都乘以一个相同的系数,然后再除以这个系数

代码语言:txt复制
console.log(((0.1*10)   (0.2*10))/10);

不同的进制转十进制

  • 二进制(0 1)转十进制
代码语言:txt复制
  -   如:111011   `1*2^5 1*2^4 1*2^3 0*2^2 1*2^1 1*2^0`
  • 八进制(0~7)转十进制
代码语言:txt复制
  -   如:072         `0*8^2 7*8^1 2*8^0=58`
  • 十六进制(0~9 A~F)转十进制
代码语言:txt复制
-   AF:1015
-   16进制数,一般会以’0x‘开头,如:0x16  `1*16^1 6*16^2=22`  0x只是一个标识
-   其他进制如3进制、4进制等转10进制计算方法与上述相同。
代码语言:txt复制
我正在参与[2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!](https://cloud.tencent.com/developer/article/2352251)

0 人点赞