C语言 按位异或实现加法
2024-10-17 08:25:53
/* C语言 按位异或实现加法 */ #include <stdio.h>
#include <stdlib.h>
#include <string.h> void test1()
{
int a = ;
int b = ;
int cand = ;
int cxor = ;
int c = ; //实现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 << ); /*
实现说明:
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 = -;
int b = ;
int cand = ;
int cxor = ;
int c = ; //实现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 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 ;
}
最新文章
- Jedis 使用范例
- 【杂记】JavaScript篇
- C# ComBox 垂直滚动条
- php json 格式控制
- 通过颜色代码初始化UIColor
- android 打包流程
- XMPP Server
- window和nodejs作用域区别(待续)
- 廖雪锋笔记1---python变量类型
- C51的一些误区和注意事项
- 【codevs】2292图灵机游戏
- stata
- Java(16)接口
- xtrabackup 在线主从搭建
- android AsyncTask异步任务(笔记)
- Kong安装教程(v1.0.2)
- classfication中使用图像金字塔和sliding windows提高准确率
- ubuntu14.04 Keras框架搭建
- 20180518VSTO多簿单表汇总外接程序按钮
- Pollywog CodeForces - 917C (状压)