• C语言 按位异或实现加法


    /* 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]--
    ", 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]--
    ", c);
    }
    
    
    int main()
    {
        test1();
        test2();
        printf("--------ok-------
    ");
        getchar();
        return 0;
    }
  • 相关阅读:
    Jmeter+Jenkins持续集成(三、集成到Jenkins)
    Jmeter+Jenkins持续集成(一、环境准备)
    Git----基础常用的命令总结
    -第5章 多级菜单
    -第4章 变幻菜单
    -第3章 jQuery方法实现下拉菜单显示和隐藏
    -第2章 JS方法实现下拉菜单显示和隐藏
    DIV+CSS+PS实现背景图的三层嵌套以及背景图的合并
    -第1章 HTMLCSS方法实现下拉菜单
    前端常用效果-目录
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/12063518.html
Copyright © 2020-2023  润新知