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安全错误
数据库的锁怎样保障安全
软件开发公司涉及会计账目
电商搭建服务器
联想小新适合做软件开发吗
dbs服务器一般是多少
香港汇丰银行外汇数据库
ns暗黑3为什么连接不到服务器
软件开发前端要干什么
数字媒体和网络技术哪个女生多
网络安全防诈骗简笔画
红思网络技术有限公司策划案
讲图数据库的书有哪些
幼儿园网络安全教育拍手歌
珠海软件开发工程师
为供电所提供专业的网络技术支持
电脑首选dns服务器查询
东莞市冰糖互联网科技有限公司
什么叫网络安全比赛
jsp把时间存入数据库
扎实开展网络安全保障工作
江苏超频服务器联系方式
mcpe战墙服务器
服务器安全软件专业版
3-5年网络安全建设
自动软件开发论坛
吴建平院士谈网络安全
安徽应用软件开发哪家实惠
手机版软件开发哪个好
数据库表示姓名的数据类型
app后台服务器
甘薯基因组数据库