汇编——位运算

底层基础前提

  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. 为什么不用原码做加减:原码正负运算硬件复杂,补码统一 一套加法电路即可处理正负
相关推荐
鹿角片ljp2 小时前
LeetCode 46. 全排列|吃透回溯
算法·leetcode·职场和发展
鼎艺创新科技2 小时前
不依赖 UE/Unity:我们如何从零搭建一套国产三维 GIS 渲染引擎
人工智能·算法·unity·游戏引擎·三维电子沙盘
剩下了什么2 小时前
float32 与 float64 精度陷阱:如何在 Go 中避免错误使用
开发语言·后端·golang
指尖时光.2 小时前
Three.js 超全入门综合案例
开发语言·javascript·ecmascript
暴力求解3 小时前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
吴声子夜歌3 小时前
Java面试题——基础(一)
java·开发语言
网安蟹佬霸3 小时前
OSINT开源情报收集实战:从信息搜集到资产测绘(2026最新万字保姆级指南)
前端·网络·安全·web安全·网络安全·开源
小庞在加油3 小时前
WinDbg实战:QT/跨平台项目死锁与无响应问题排查指南
开发语言·qt·windbg·工具
Vae_Mars4 小时前
C#中的delegate委托
开发语言·c#
游戏开发爱好者84 小时前
WebSocket 抓包怎么查看内容?从握手到消息帧完整解读
网络协议·计算机网络·网络安全·ios·adb·https·udp