今天有群友发了一个问题,要求不用加减符号(包括负号)来实现加减法。
分析一下,先看最简单的情况,假设1+1,按二进制算的话结果是10,可以看到从右往左的第一位变为0,第二位由于进位变为1。
第1位的值有4种,0+0=0、1+0=1、0+1=1、1+1=0,这正好符合“异或”的情况。
第2位的值来自于第一位的进位加上本身的值,进位的情况也有4种,0+0=0、1+0=0、0+1=0,1+1=1,这正好符合“与”的情况。
考虑一般性,a+b就等同于a^b + (a&b) << 1,而这又是一个加法,可递归求解,出口就是当进位为0的时候。
看个例子:
11+2
转为二进制,套用上面公式分析:
1011 + 0010
=1001 + 0100
=1101 + 0000
=1101
结果转为10进制为13
可以自己在草稿纸上多看看例子观察下。
所以Java代码实现如下:
public static int add(int a, int b){
return b == 0 ? a : add(a ^ b ,(a & b) << 1);
}
那么减法怎么搞呢?减法也能用加法表示嘛,比如a-b就等于a+(-b),但不能出现负号,我们知道Java中整型数值编码方式为补码,所以一个数对应的负数就这个数“取反加1”,so 代码如下:
public static int sub(int a, int b){
return add(a, add(~b, 1));
}
这是群友给的答案,有点意思,记录一下。
分享到:
相关推荐
实现逻辑运算(逻辑非,逻辑加。。)定点整数的单符号位补码加减法,定点整数的原码一位乘法,浮点数的加减运算
用multisim实现8位原码加减法器 1、 设计一个8位运算器电路,该电路可实现Y=±A±B,即可实现±A±B,也可实现B±A。其输入数据A、B为原码,其中高1位为符号位,低7位为数据位,运算结果Y需要转换为原码表示。 2、 ...
Java编写的计算器图形界面实现加减乘除带括号运算 版本1.0 1、图形化界面 2、计算器显示部分分为两个区域:第一行显示输入将要计算的数值及符号,第二行显示结果,第一行字体要小,第二行字体要大,且加粗。 ...
1、设计一个能够完成8位补码加减法运算器,采用8位数据总线结进行数据的输入、输出。利用行波(串行)进位的方式,并具备数据锁存功能和溢出判断功能。 2、输入数据为补码,其中高1位为符号位,低7位为数据位,运算...
使用汇编编写两位数加减乘除符号运算计算器
大整数的加减法运算
用Verilog编写的32位加减法器,有nclaunch 仿真功能图,有design_vision 的门级仿真结果,代码提供了两种基础加法器架构:逐位进位加法器和超前进位加法器,值得学习。
这个是带有加减法的的汇编子程序,已经通过调试了!~
操作数用补码表示,符号位与尾数一起参加运算,结果的符号与加减相同; C. 操作数用补码表示,连同符号位直接相加减,减某数用加负某数的补码代替,结果的符号在运算中形成; D. 操作数用补码表示,由数符决定两...
线性表设计100位以内的长整数加减运算的程序 1、输入输出要求:每四位一组,组间用逗号分隔。 2、加和减分别用不同的程序实现。 3、程序应考虑输入数据的符号。
8位可控加减法器&5位阵列乘法器 Logisim仿真实验图,仿真完全正常的
用verilog语言编写的补码加减法器,其中三位数值为,一位符号位。
计算机组成原理实验logisim设计
在对应子电路中利用已经封装好的全加器设计8位串行可控加减法电路,其电路引脚定义如图所示,用户可以直接使用在电路中使用对应的隧道标签,其中 X,Y 为两输入数,Sub 为加减控制信号,S 为运算结果输出,Cout 为...
文档包括电路图,实物图,编程,编程有中文注释。。比较易懂,所需软硬件解释比较清楚
整数的加、减、乘、除、取余操作中,对于减操作,只要看作是将减数改变了符号的加操作即可;乘和整数操作结果的符号只是对两个操作数做异或操作;取余操作的符号取决于被取余数值得符号。
通过对话框的形式用户输入想测试的加减法算式及其答案,利用截取字符串的方式将数字、加减符号、等号、结果从输入的算式中分离出来。并进行正确的运算,若用户所输入的结果与算式本身的结果相等,方可判断出输入的...
C语言编一个程序完成64位数据(无符号)的加法,减法运算
1、机器字长是5位机; 2、输入的是二进制的真值; 3、输出每个每个数的补码表示;...4、输出结果的补码表示,如果有符号位进位,必须带上; 5、处理过程必须体现二进制加法法则; 6、必须判断出是否溢出。
实现机器数的真值还原(定点整数)、定点整数的单符号位补码加减运算、定点整数的原码一位乘法运算和浮点数的加减运算。 (1)系统进入(主)窗体的设计:菜单需要在输入口令正确后方可激活使用。口令输入错误时要...