首页 > 编程语言 > 详细

C语言 按位异或实现加法

时间:2019-12-18 22:49:21      阅读:129      评论:0      收藏:0      [点我收藏+]
/* C语言 按位异或实现加法 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void test1()
{
    int a = 2;
    int b = 3;
    int cand = 0;
    int cxor = 0;
    int c = 0;

    //实现c=a+b

    //1.不考虑进位,按位计算各位累加(用异或实现),得到值xor;
    cxor = a^b;
    /*
    实现说明:
        a的值是2,对应计算机中补码是 0000 0000 0000 0000 0000 0000 0000 0010
        b的值是3,对应计算机中补码是 0000 0000 0000 0000 0000 0000 0000 0011
        a^b即
        0000 0000 0000 0000 0000 0000 0000 0010
        0000 0000 0000 0000 0000 0000 0000 0011
        0000 0000 0000 0000 0000 0000 0000 0001    --->异或结果
    */

    //2.考虑进位,进行位与运算之后,结果左移1位
    cand = a&b;
    /*
    实现说明:
        a的值是2,对应计算机中补码是 0000 0000 0000 0000 0000 0000 0000 0010
        b的值是3,对应计算机中补码是 0000 0000 0000 0000 0000 0000 0000 0011
        a^b即
        0000 0000 0000 0000 0000 0000 0000 0010
        0000 0000 0000 0000 0000 0000 0000 0011
        0000 0000 0000 0000 0000 0000 0000 0010    --->与结果
        0000 0000 0000 0000 0000 0000 0000 0100    --->与结果左移1位,即cand的值
    */

    //3.进行求和计算
    c = cxor + (cand << 1);

    /*
    实现说明:
        0000 0000 0000 0000 0000 0000 0000 0001    --->异或结果
        0000 0000 0000 0000 0000 0000 0000 0100    --->与结果左移1位,即cand的值
        0000 0000 0000 0000 0000 0000 0000 0101    --->最终结果是5
    */

    printf("--test1--c[%d]--\n", c);
}

void test2()
{
    int a = -2;
    int b = 3;
    int cand = 0;
    int cxor = 0;
    int c = 0;

    //实现c=a+b

    //1.不考虑进位,按位计算各位累加(用异或实现),得到值xor;
    cxor = a^b;
    /*
    实现说明:
        a的值是2,对应计算机中补码是 1 111 1111 1111 1111 1111 1111 1111 1110
        b的值是3,对应计算机中补码是 0 000 0000 0000 0000 0000 0000 0000 0011
        a^b即
        1 111 1111 1111 1111 1111 1111 1111 1110
        0 000 0000 0000 0000 0000 0000 0000 0011
        1 111 1111 1111 1111 1111 1111 1111 1101    --->异或结果
    */

    //1.考虑进位,进行位与运算之后,结果左移1位
    cand = a&b;
    /*
    实现说明:
        a的值是2,对应计算机中补码是 1 111 1111 1111 1111 1111 1111 1111 1110
        b的值是3,对应计算机中补码是 0 000 0000 0000 0000 0000 0000 0000 0011
        a^b即
        1 111 1111 1111 1111 1111 1111 1111 1110
        0 000 0000 0000 0000 0000 0000 0000 0011
        0 000 0000 0000 0000 0000 0000 0000 0010    --->与结果
        0 000 0000 0000 0000 0000 0000 0000 0100    --->与结果左移1位,即cand的值
    */

    //3.进行求和计算
    c = cxor + (cand << 1);

    /*
    实现说明:
        1 111 1111 1111 1111 1111 1111 1111 1101    --->异或结果
        0 000 0000 0000 0000 0000 0000 0000 0100    --->cand的值
        0 000 0000 0000 0000 0000 0000 0000 0001    --->最终结果是1
    */

    printf("--test2--c[%d]--\n", c);
}


int main()
{
    test1();
    test2();
    printf("--------ok-------\n");
    getchar();
    return 0;
}

 

C语言 按位异或实现加法

原文:https://www.cnblogs.com/zhanggaofeng/p/12063518.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!