Java不用算数运算符怎么实现求和
发表于:2024-11-16 作者:千家信息网编辑
千家信息网最后更新 2024年11月16日,这篇文章主要介绍"Java不用算数运算符怎么实现求和"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Java不用算数运算符怎么实现求和"文章能帮助大家解决问题。
千家信息网最后更新 2024年11月16日Java不用算数运算符怎么实现求和
这篇文章主要介绍"Java不用算数运算符怎么实现求和"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Java不用算数运算符怎么实现求和"文章能帮助大家解决问题。
题目说了不能用算数运算符,那么我们就只能从 逻辑运算符 和 移位运算符 入手了。
我们知道 ^ (异或)操作是对两个数进行无进位求和,如果两个数相加本来就不产生进位,那么该和就是两数之和。 这就是解题的关键所在。一般来说,两数相加是会产生进位的,而要得到正确的和,应该是在 "无进位之和" 的基础上加上进位,那我们首先应该得到进位。我们知道,当两个数对应位置都为1的情况下,才会有进位的产生,即对应位置 A&B==1的条件下,就可以得到每一位的进位,但是进位是将这个1加到对应的更高一位,所以我们将得到的进位整体进行左移一位,再和之前得到的 "无进位之和" 相加,就可以得到两数之和。
我们发现这里就可以无限套娃了,要得到 "无进位之和" 和 "产生的进位" 之和,那么将这两个数再分别看做新的两个数,对其求和。也是重复之前的操作,直到两数不能产生进位,就可以直接通过 ^ 运算得到结果。
假设我们求 23 + 16 的值
根据上述思路,我们很容易就可以写出代码
public static int addAB(int A, int B) { // 当两数的产生的进位为 0,就退出循环,返回其无进位和,就是结果 while ((A & B) != 0) { int A_B = A ^ B;// 无进位求和 int AB = (A & B) << 1;// 得到进位 // 接下来就是求 得到的进位 + 无进位之和,重复前面的操作,直到不产生进位 A = A_B; B = AB; } // 最后返回新的无进位之和 return (A ^ B); }
那么为了验证它的正确性,我们这里使用对数器,将该函数与 ’ + ’ 运算符比较。
public static void main(String[] args) { int count = 1_0000_0000;// 比较次数 100000000次 Random random = new Random();// 生成随机数字 boolean flag = true;// 相等则为 true for (int i = 0; i < count; i++) { int num1 = random.nextInt(Integer.MAX_VALUE/2);// 随机正数1 int num1_2 = random.nextInt(Integer.MAX_VALUE/2);// 随机正数2 // 随机正数1 + 随机正数2 if ((num1+num1_2) != addAB(num1,num1_2)){ // 有一次不相等的,则退出循环 flag = false; break; } int num2 = -random.nextInt(Integer.MAX_VALUE/2);// 随机负数1 int num2_2 = -random.nextInt(Integer.MAX_VALUE/2);// 随机负数2 // 随机负数1 + 随机负数2 if ((num2+num2_2) != addAB(num2,num2_2)){ // 有一次不相等的,则退出循环 flag = false; break; } int num3 = random.nextInt(Integer.MAX_VALUE);// 随机正数 int num4 = -random.nextInt(Integer.MAX_VALUE);// 随机负数 // 随机正数 + 随机负数 if ((num3+num4) != addAB(num3,num4)){ // 有一次不相等的,则退出循环 flag = false; break; } } System.out.println(flag);}
运行结果:
最后输出结果为 true ,说明我们计算随机产生的 正数+正数、负数+负数、正数+负数 分别100000000次,没有一次出错,说明该函数可靠。
关于"Java不用算数运算符怎么实现求和"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
正数
负数
运算
之和
运算符
两个
就是
结果
循环
不用
知识
位置
函数
行业
不同
实用
接下来
一般来说
代码
关键
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
提取网页变化数据库
微信出现访问安全数据库
疫情网络安全防控
索闻博识数据库
电脑声音服务器未启动怎么办
c 数据库插入多列
阿里云服务器提示安全风险
阿里云服务器命令
那年设计的网络安全日
青年人应该怎么防范网络安全
免费中文数据库
网络安全法净网
游戏商城怎么在数据库查看
团县委参与网络安全宣传
属于图书馆购买的文献数据库
我的世界2b2t服务器最新
大专计算机网络技术是什么
成人大学网络安全专业
广东机架式服务器报价
数据库app
tp如何连接多个数据库
iis 应用程序服务器
OMG视频软件开发
光遇OPPO服务器
深圳应用软件开发价位
无源光网络技术要求
老男孩网络安全课
单元测试是在软件开发过程
我的世界坑爹哥服务器
网络安全小报写什么字