XingYun blog
  • JS基础

    • 图解js原型链
    • JS Event Loop
    • 对象的底层数据结构
    • 让你的JavaScript代码简单又高效
    • 函数参数按值传递
    • 判断数据类型
    • 浮点数精度问题和解决办法
    • 常用方法snippet
    • 实现Promise
    • 防抖和节流
    • 巧用sort排序
  • CSS && HTML

    • CSS也需要性能优化
    • class命名规范
    • em、px、rem、vh、vw 区别
    • CSS揭秘阅读笔记
  • 浏览器

    • 浏览器是如何渲染页面的
    • 重排和重绘
    • BOM浏览器对象模型
    • DOM事件
    • 浏览器存储
  • 数据结构

    • JS实现链表
    • JS实现栈与栈应用
    • JS实现常见排序
    • 哈夫曼编码
    • MD5算法
  • vue原理浅析

    • Vue虚拟dom与Diff算法
    • 前端打包文件的缓存机制
    • vue数组为什么不是响应式
    • v-for为什么不能用index做key
  • 前端工程化

    • 浏览器是如何渲染页面的
    • 前端打包需要gzip压缩吗
    • 前端打包文件的缓存机制
    • webpack loader和plugin
  • 轮子&&组件库

    • 实现水波浪进度球
  • 文字转语音mp3文件
  • 文件上传前后端实现
  • moment.js给定时间获取自然月、周的时间轴
  • 实现文件上传功能
  • 批量下载照片
  • leaflet改变坐标原点
  • 网络

    • 有了MAC地址 为什么还需要IP地址
    • 为什么IP地址老是变
    • 我们为什么需要IPV6
    • TCP与UDP
  • 计算机组成原理

    • ASCII、Unicode、UTF-8和UTF-16
  • VSCode

    • VSCode图片预览插件 Image preview
    • rsync:linux间的高效传输工具

XingYun

冲!
  • JS基础

    • 图解js原型链
    • JS Event Loop
    • 对象的底层数据结构
    • 让你的JavaScript代码简单又高效
    • 函数参数按值传递
    • 判断数据类型
    • 浮点数精度问题和解决办法
    • 常用方法snippet
    • 实现Promise
    • 防抖和节流
    • 巧用sort排序
  • CSS && HTML

    • CSS也需要性能优化
    • class命名规范
    • em、px、rem、vh、vw 区别
    • CSS揭秘阅读笔记
  • 浏览器

    • 浏览器是如何渲染页面的
    • 重排和重绘
    • BOM浏览器对象模型
    • DOM事件
    • 浏览器存储
  • 数据结构

    • JS实现链表
    • JS实现栈与栈应用
    • JS实现常见排序
    • 哈夫曼编码
    • MD5算法
  • vue原理浅析

    • Vue虚拟dom与Diff算法
    • 前端打包文件的缓存机制
    • vue数组为什么不是响应式
    • v-for为什么不能用index做key
  • 前端工程化

    • 浏览器是如何渲染页面的
    • 前端打包需要gzip压缩吗
    • 前端打包文件的缓存机制
    • webpack loader和plugin
  • 轮子&&组件库

    • 实现水波浪进度球
  • 文字转语音mp3文件
  • 文件上传前后端实现
  • moment.js给定时间获取自然月、周的时间轴
  • 实现文件上传功能
  • 批量下载照片
  • leaflet改变坐标原点
  • 网络

    • 有了MAC地址 为什么还需要IP地址
    • 为什么IP地址老是变
    • 我们为什么需要IPV6
    • TCP与UDP
  • 计算机组成原理

    • ASCII、Unicode、UTF-8和UTF-16
  • VSCode

    • VSCode图片预览插件 Image preview
    • rsync:linux间的高效传输工具
  • 算法图解阅读笔记
  • MD5算法
  • JS实现常见排序
  • 邓俊辉算法与数据结构
  • JS实现队列
  • JS实现树的几种遍历方式
  • 二叉树相关
  • 哈希算法
  • 进制转换与js实现
    • JS实现链表
    • JS实现栈与栈应用
    • 算法与数据结构
    XingYun
    2022-02-05
    目录

    进制转换与js实现

    # 一、十进制数转换为二进制数

    十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并

    例:(173.8125)10 =( )2

    # 1. 十进制整数转换为二进制整数

    十进制整数转换为二进制整数采用"除 2 取余,逆序排列"法。

    具体做法是:用 2 去除十进制整数,可以得到一个商和余数;再用 2 去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

    例如把 (173)10 转换为二进制数。

    解:

    注意这里结果是逆序排列,这个过程和递归程序类型

    # 2.十进制小数转换为二进制小数

    十进制小数转换成二进制小数采用"乘 2 取整,顺序排列"法。具体做法是:用 2 乘十进制小数,可以得到积,将积的整数部分取出,再用 2 乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。

    然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。

    例如把(0.8125)转换为二进制小数。

    这里和整数正好相反是顺序排列

    在上个例子中得(173)10 =(10101101)2

    得(0.8125)10 =(0.1101)2

    把整数部分和小数部分合并得:

    (173.8125)10 =(10101101.1101)2

    # 二、js 中十进制转二进制

    JS 内置这个方法

    const value = parseInt(12).toString(2) // '1100'
    
    // parsetInt里面是要转换的数字,toString里面是要转换的进制,
    // 如果要转换为其他进制,替换掉就好了。
    
    parseInt(12).toString(16) // 'c'
    
    1
    2
    3
    4
    5
    6

    如果要自己代码实现呢?

    下面给出正整数和正小数的代码,其它负数情况也类似

    // 十进制正整数转二进制
    const integerGEQZero = (number) => {
      let result = ''
      while (number >= 1) {
        result = (number % 2) + result
        number = Math.floor(number / 2)
      }
      return result
    }
    
    // 十进制正小数转二进制
    const floorBetweenZeroOne = (number) => {
      let result = ''
      while (
        number != 0 &&
        number != 1 && // 取值到 0 或者 1 为止
        result.length < 32 // 或者长度达到需要
      ) {
        // 取小数部分
        if (number > 1) {
          number = number - 1
        }
        result = result + Math.floor(number * 2)
        number = number * 2
      }
      result = '0.' + result
      return result
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28

    # 十进制转 n 进制

    function baseConversion(num, base) {
      let arr = [num]
      while (arr[0] >= base) {
        let current = arr[0]
        arr[0] = num % base
        arr.unshift(Math.floor(current / base))
      }
      return arr.join(',')
    }
    
    console.log(baseConversion(12, 36)) // 12
    console.log(baseConversion(124, 36)) // 3,16
    console.log(baseConversion(288, 36)) // 8,0
    console.log(baseConversion(46656, 18)) // 8,0,0,0
    console.log(baseConversion(128, 2)) // 1,0,0,0,0,0,0,0
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #算法
    上次更新: 2023/04/05, 09:41:10
    哈希算法
    JS实现链表

    ← 哈希算法 JS实现链表→

    最近更新
    01
    JavaScript-test
    07-20
    02
    二维码的原理
    07-20
    03
    利用ChatGPT优化代码
    07-20
    更多文章>
    Theme by Vdoing | Copyright © 2021-2023 XingYun | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式