汇编——位运算

底层基础前提

  1. 计算机硬件仅识别二进制 0、1,CPU 原生只有位运算指令:AND、OR、NOT、XOR、SHL/SHR 移位,没有直接的加减乘除硬件电路
  2. 所有加减乘除四则运算,全部依靠位运算组合模拟实现,是底层原理、面试高频考点

加法底层原理(XOR + AND + SHL 三步法)

核心逻辑拆解

  1. XOR 异或 = 无进位本位和 相同为 0、不同为 1,完全等价只算本位、忽略进位的加法结果
  2. AND 按位与 = 识别进位位置 两位全为 1 才输出 1,凡是AND结果为 1 的二进制位,代表此处产生进位
  3. SHL 逻辑左移 1 位 = 进位整体挪到高位 进位要加到左边相邻高位,所以进位值整体左移一位
  4. 循环叠加:把【本位异或结果】和【左移后的进位值】再次套入这套逻辑,直到进位值变为 0,此时异或值就是最终加法答案
    实例演示:4 + 5
  5. 转二进制4=0100,5=0101
  6. 第一轮
    ● XOR:0100
    0101

    = 0001(无进位和)
    ● AND:0100
    0101

    = 0100(存在进位)
    ● 进位左移 1 位:0100 << 1 = 1000
  7. 第二轮,计算 0001 + 1000
    ● XOR:0001
    1000

    = 1001
    ● AND:0001
    1000

    = 0000(无进位)
  8. 进位 = 0,终止运算1001 = 9

减法底层原理(加法变形:A - B = A + (-B)

关键规则

计算机负数用补码存储,-B = B按位取反 + 1(NOT B + 1),减法等价「被减数 + 减数的补码」,复用上面一套加法位运算逻辑

实例演示:4 - 5

  1. 转化:4 - 5 = 4 + (-5)
  2. 求 - 5 补码(4 位演示)5=0101,按位取反1010,+1得补码1011
  3. 套加法流程计算 0100 + 1011,最终得到负数补码结果,解析后值为-1

乘法、除法底层逻辑

  1. 乘法:拆解为移位累加
    a × n= 把 a 根据 n 的二进制每一位,对应左移若干位,全部移位结果累加,底层依托加法位运算
    例:5×3=5×(2+1) = (5<<1)+5 //二进制里数字左移1位=乘以2^1
  2. 除法:拆解为移位递减
    循环用大数减小数、配合右移实现整除取商、余数,底层依托减法(二次依托加法位运算)

整体层级关系

  1. 最底层:原生位运算(与 / 或 / 非 / 异或 / 移位)
  2. 中层:组合位运算实现加法、减法
  3. 上层:依托加减实现乘法、除法 所有复杂数值运算,根源全部来自基础位运算组合

面试考点

  1. 加法两步核心:XOR 拿本位、AND+SHL 处理进位,循环至进位清零
  2. 减法本质:加上减数的补码
  3. 乘除是加减的移位循环封装
  4. 为什么不用原码做加减:原码正负运算硬件复杂,补码统一 一套加法电路即可处理正负
相关推荐
君顾12 分钟前
外卖CPS系统开发实战指南:从架构设计到部署全流程解析
java·开发语言·外卖
彧azz26 分钟前
二叉搜索树学习记录
c语言·数据结构·笔记·算法
是立不是利37 分钟前
前端交互基石:深入剖析JavaScript三级联动背后的设计哲学
开发语言·前端·javascript
老刘的望远镜1 小时前
AgentScope Java 从零(03):Agent 的记性默认全开,我在第 50 轮翻了车
java·开发语言·javascript
Littlehero_1211 小时前
QT自定义控件之电气接线图(源码开源)
开发语言·qt
手写码匠1 小时前
DeepSeek 函数调用实战:从零搭建一个会“动手“的 AI 助手
人工智能·深度学习·算法·aigc
中科三方1 小时前
DNS拨测到底在拨测什么?
开发语言·github·php·dns·云拨测
软件黑马王子1 小时前
20.Resources资源加载:基本实现
开发语言·前端框架·c#
李少兄2 小时前
Java 中只有值传递吗?
java·开发语言·python