C 在不使用+的情况下添加两个数字;签名

C 在不使用+的情况下添加两个数字;签名,c,C,我是9年级的学生,我的数学老师让我用+登录C程序来添加数字 我试过a-(-b)=a+b但是我的数学老师想要一些其他的选择。使用反日志()你可以这样做 Temp= Anti Log(a)* Anti Log(b); a+b value is equals to log(Temp); 适用于整数而不是双精度。在c程序中使用此函数 int Add(int a, int b) { while (b) { // carry now contains common set

我是9年级的学生,我的数学老师让我用
+
登录C程序来添加数字

我试过
a-(-b)=a+b
但是我的数学老师想要一些其他的选择。

使用
反日志()
你可以这样做

Temp= Anti Log(a)* Anti Log(b);

a+b value is equals to log(Temp);

适用于整数而不是双精度。

在c程序中使用此函数

int Add(int a, int b)
{
    while (b)
    {
        // carry now contains common set bits of "a" and "b"
        int carry = a & b;

        // Sum of bits of "a" and "b" where at least one of the bits is not set
        a = a ^ b;

        // Carry is shifted by one so that adding it to "a" gives the required sum
        b = carry << 1;
    }
    return a;
}
intadd(inta,intb)
{
而(二)
{
//现在进位包含“a”和“b”的公共设置位
整数进位=a&b;
//“a”和“b”的位之和,其中至少一位未设置
a=a^b;
//进位移动1,因此将其添加到“a”中可以得到所需的总和

b=进位使用按位
^
&
运算符和递归

int add(int x, int y){
    return y == 0 ? x : add( x ^ y, (x & y) << 1);
}
intadd(intx,inty){

返回y==0?x:Java中使用递归添加(x^y,(x&y)-

public static int add(int a, int b){

    if(b == 0) return a;
    int sum = a ^ b;
    int carry = (a & b) << 1;

    return add(sum, carry);

}
publicstaticintadd(inta,intb){
如果(b==0),则返回a;
整数和=a^b;
整数进位=(a&b)
#包括
整数相加(整数a,整数b){
返回(int)和(char*)a[b];
}
int main(){
printf(“%d”,添加(5,17));
getchar();
}

不可移植,但不使用“+”字符。这会将a强制转换为字符指针,并使用[]向其添加b然后将其转换回整数。

你的解决方案就是我首先想到的。他可能指的是按位的,然后?从我的头顶上说:为了找出将携带的位,要加上XOR;然后向左移动and结果,并重复将其加到XOR值,直到没有and和left?也许可以尝试更多……迭代。(想一想
,而
)你真的应该要求你的教授更具体地说明约束条件。下面的基于对数的方法很优雅,但似乎有点“简单”我怀疑你的教授,鉴于这是一门编程课程,他希望你使用基于布尔逻辑的方法,而不是代数方法。下面所有的答案都是+1!虽然这个问题很有趣,但这是要求他做家庭作业。区别是什么?我喜欢这个逻辑。它适用于整数。区别不是exact相等。小数点后a-b=log(antilog(a)/antlog(b))和a*b=log(antilog(a)+antlog(b))有一些不同,a/b=log((antilog(a)-(antilog(b)))“antilog”是一个非常奇怪的名字,考虑到对数本身被定义为指数的倒数。。。
int add(int a, int b){

    if(b == 0) return a;
    int sum = a ^ b;
    int carry = (a & b) << 1;

    return add(sum, carry);
}
#include<stdio.h>

int add(int a, int b) {
    return (int)&((char *)a)[b];
}

int main() {
    printf("%d", add(5, 17));
    getchar();
}