news 2026/8/25 7:46:06

初级--05--- 取模运算转化为位运算、位运算进行加减乘除

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
初级--05--- 取模运算转化为位运算、位运算进行加减乘除

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 取模运算 转化为 位运算
    • 公式:
        • ==a%b = a&(b-1) ,且b=1<<k(k为整数)==
      • 案例:
        • num % 64 等于 num & 63
    • 原理:
    • 注意:
        • 取模的数b, 要满足b为2的整数次幂(即b=1<<k,k为整数),公式转化才成立
  • 位运算进行加减乘除
        • 初级--01---二进制、位运算
        • num >> 6 相当于 num/64
    • 1. 加法:add
        • 无进位信息和+进位信息和 = 加法的和
      • ==a^b + (a&b)<<1==
    • 2. 减法: minus
        • 可以将减法转换成加法计算。a - b = a + (-b)
      • 相反数
      • 正数相反数 = 其反码+1
      • 减法代码
    • 3. 乘法: multi
    • 4. 除法: divide
        • 位运算--01---两数相除

取模运算 转化为 位运算

公式:

若满足b为2的整数次幂(即b=1<<k,k为整数)时,可用一个特殊的小技巧将取模运算转化为位运算,

a%b = a&(b-1) ,且b=1<<k(k为整数)

案例:

num % 64 等于 num & 63

原理:

注意:

取模的数b, 要满足b为2的整数次幂(即b=1<<k,k为整数),公式转化才成立

位运算进行加减乘除

初级–01—二进制、位运算

num >> 6 相当于 num/64

1. 加法:add

  1. 由a^b可得按位相加后没有进位的和;
  2. 由a&b可得可以产生进位的地方;
  3. 由(a&b)<<1得到进位后的值。
  4. 那么 按位相加后原位和+进位和 就是加法的和了,而 a^b + (a&b)<<1 相当于把 +
    两边再代入上述三步进行加法计算。直到进位和为0说明没有进位了则此时原位和即所求和。
无进位信息和+进位信息和 = 加法的和

a^b + (a&b)<<1

publicstaticintadd(inta,intb){intsum=a;while(b!=0){sum=a^b;//无进位信息和b=(a&b)<<1;//进位信息和a=sum;//无进位相加信息}returnsum;}

2. 减法: minus

可以将减法转换成加法计算。a - b = a + (-b)

相反数

正数相反数 = 其反码+1

publicstaticintnegNum(intn){returnadd(~n,1);}

减法代码

publicstaticintnegNum(intn){returnadd(~n,1);}publicstaticintminus(inta,intb){returnadd(a,negNum(b));}

3. 乘法: multi

publicstaticintmulti(inta,intb){intres=0;while(b!=0){if((b&1)!=0){res=add(res,a);}a<<=1;b>>>=1;}returnres;}

4. 除法: divide

除法的意义就在于:求a可以由多少个b组成。那么由此我们可得除法的实现:求a能减去多少个b,做减法的次数就是除法的商。

位运算–01—两数相除
publicstaticbooleanisNeg(intn){returnn<0;}publicstaticintdiv(inta,intb){intx=isNeg(a)?negNum(a):a;inty=isNeg(b)?negNum(b):b;intres=0;for(inti=30;i>=0;i=minus(i,1)){if((x>>i)>=y){res|=(1<<i);x=minus(x,y<<i);}}returnisNeg(a)^isNeg(b)?negNum(res):res;}publicstaticintdivide(inta,intb){if(a==Integer.MIN_VALUE&&b==Integer.MIN_VALUE){return1;}elseif(b==Integer.MIN_VALUE){return0;}elseif(a==Integer.MIN_VALUE){if(b==negNum(1)){returnInteger.MAX_VALUE;}else{intc=div(add(a,1),b);returnadd(c,div(minus(a,multi(c,b)),b));}}else{returndiv(a,b);}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 7:38:21

主流登录鉴权框架深度解析:Spring Security、Shiro、JWT与OAuth2选型指南

1. 项目概述&#xff1a;为什么我们需要盘点登录与鉴权框架&#xff1f;在任何一个需要区分用户身份、控制资源访问的应用里&#xff0c;登录和鉴权都是绕不开的基石。简单来说&#xff0c;登录解决“你是谁”的问题&#xff0c;而鉴权则回答“你能做什么”。我见过太多项目&am…

作者头像 李华
网站建设 2026/8/25 7:37:35

本地IDE与笔试平台环境差异解析与解决方案

1. 本地IDE与笔试平台差异概述作为经历过数十次在线笔试的开发者&#xff0c;我深刻理解当代码在本地IDE运行完美却在笔试平台报错时的崩溃感。这种差异主要源于以下几个关键因素&#xff1a;开发环境与运行环境的差异就像是在自家厨房做菜和参加厨艺比赛的区别。本地IDE相当于…

作者头像 李华
网站建设 2026/8/25 7:36:10

从Ubuntu迁移回Windows:21步实战指南与数据安全备份

1. 从Ubuntu回归Windows&#xff1a;一次完整的系统迁移之旅最近帮朋友处理了一台旧笔记本&#xff0c;他之前为了尝鲜装上了Ubuntu&#xff0c;用了一段时间后发现还是离不开Windows生态下的某些专业软件和游戏&#xff0c;于是决定重装回Windows。这个需求听起来简单&#xf…

作者头像 李华
网站建设 2026/8/25 7:35:23

2026年高性价比UPS选购指南:150-550元区间16款横评与实战配置

在小型办公室、家庭办公或租房场景下&#xff0c;一台可靠的UPS&#xff08;不间断电源&#xff09;是保障核心设备稳定运行和数据安全的关键。它不仅仅是应对突发停电&#xff0c;更重要的是解决电压不稳、瞬间浪涌、频率波动等常见市电问题&#xff0c;防止电脑、NAS、路由器…

作者头像 李华
网站建设 2026/8/25 7:34:54

STM32程序跑飞调试:在线调试、看门狗与崩溃日志的三层防御体系

1. 项目概述&#xff1a;从“跑飞”到“驯服”的调试征途搞STM32开发的兄弟&#xff0c;估计没几个没被“程序跑飞”折磨过。前一秒还在正常执行&#xff0c;下一秒就“死”得悄无声息&#xff0c;或者干脆在某个地方“鬼打墙”式地循环。这种问题&#xff0c;在线调试器&#…

作者头像 李华