前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • React专栏

    • React组合式开发实战

      • 前端开发的四个时代
      • 企业管理系统的前世今生
      • 可视化页面搭建工具
      • 实战篇 01:开发前准备
      • 实战篇 02:项目脚手架
      • 实战篇 03:页面布局方案
      • 实战篇 04:权限管理机制
      • 实战篇 05:菜单匹配逻辑
      • 实战篇 06:消息通知设计
      • 实战篇 07:多语言支持
      • 继往开来:可视化页面搭建工具
    • React Hooks与Immutable实战

    • React SSR服务端渲染与同构实践

    • IM聊天系统前端开发实践

    • 微前端开发实战

    • React进阶实践

  • Vue专栏

  • 移动端专栏

  • Node专栏

  • 前端工程化专栏

  • 算法专栏

  • Typescript专栏

  • 其他专栏

完整面试题地址:
作者:程序员poetry
扫码关注作者公众号:「前端进阶之旅」 每天分享技术干货
前端进阶之旅公众号二维码

# 题目

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

# 思路

将加法拆解成三步:

  • 1.不进位相加
  • 2.计算进位
  • 3.进位与不进位结果进行相加
  • 重复这三步,直到进位值为0

举一个十进制的例子 5 + 17:

  • 1.不进位相加 -> 12
  • 2.计算进位 -> 5+7 产生进位 10
  • 3.进位与不进位结果进行相加 12 + 10 = 22

使用二进制代替上面的过程:

  • 5 的二进制为101,17的二进制为10001
  • 1.不进位相加 -> 101+10001=10100
  • 2.计算进位 -> 10
  • 3.进位与不进位结果进行相加 10100 + 10 = 10110,转换成十进制后即22

使用位运算来计算二进制:

  • 二进制异或操作和不进位相加得到的结果相同(1^1=0 0^1=1 0^0=0)
  • 二进制与操作后左移和进位结果相同(1&1=1 1&0=0 0&0=0)

# 代码

递归实现

    function Add(num1, num2) {
      if (num2 === 0) {
        return num1;
      }
      return Add(num1 ^ num2, (num1 & num2) << 1);
    }
@前端进阶之旅: 代码已经复制到剪贴板

非递归实现

    function Add(num1, num2) {
      while (num2 != 0) {
        const excl = num1 ^ num2;
        const carry = (num1 & num2) << 1;
        num1 = excl;
        num2 = carry;
      }
      return num1;
    }
@前端进阶之旅: 代码已经复制到剪贴板

# 考察点

  • 位运算
  • 二进制
fe
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • React专栏

    • React组合式开发实战

      • 前端开发的四个时代
      • 企业管理系统的前世今生
      • 可视化页面搭建工具
      • 实战篇 01:开发前准备
      • 实战篇 02:项目脚手架
      • 实战篇 03:页面布局方案
      • 实战篇 04:权限管理机制
      • 实战篇 05:菜单匹配逻辑
      • 实战篇 06:消息通知设计
      • 实战篇 07:多语言支持
      • 继往开来:可视化页面搭建工具
    • React Hooks与Immutable实战

    • React SSR服务端渲染与同构实践

    • IM聊天系统前端开发实践

    • 微前端开发实战

    • React进阶实践

  • Vue专栏

  • 移动端专栏

  • Node专栏

  • 前端工程化专栏

  • 算法专栏

  • Typescript专栏

  • 其他专栏