码迷,mamicode.com
首页 > 编程语言 > 详细

C语言 按位异或实现加法

时间:2019-12-18 22:07:56      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:ret   getch   void   int   计算   异或   style   getchar   color   

/* 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语言 按位异或实现加法

标签:ret   getch   void   int   计算   异或   style   getchar   color   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!