C语言中位移运算符的应用(不用加法计算两个数之和)

1.位移运算

一般包括三种:按位与&,按位或|,按位异或^,三者均是在数字的二进制形式下进行计算的;


(1)按位与&,1与1为1,1与0,0与0均为0;

(2)按位或|,1或1为1,1或0为1,0或0为0;

(3)按位异或,相同为0,相异为1;

2.补码

计算机中,存储整数均采用补码形式,正数的原,反,补码一致,而负数的反码等于源码除符号位

外,其余按位取反,补码等于反码加1

3.不用加法得出两个数相加结果

一般情况下,加法运算包括进位和不进位两种结果, 而采用位运算进行加法,就相当于无进位加法+进位加法的结果。

例如:

a=101,即a=5;b=001,即b=1;第一次无进位的和是100,进位和是010,进位和不为0,就将上次无进位的和当作a,进位和当作b,如此循环,直到进位和为0,而无进位加法即按位异或,而进位加法为两个数按位与之后向左移动一位,代码如下:

int Add(int num1, int num2 ) //两个num1,num2
{
    while(num2)//直到进位相加数为0,循环停止
    {
        int a=(num1&num2)<<1;//两个数按位与,再左移一位,得到每位数进位相加后的结果
        num1=num1^num2;//将两个数无进位相加后的数赋值给num1;
        num2=a;//将进位相加后得到的数赋给num2,
    }
    return num1;//当进位相加为0,得到的无进位相加的结果即为两个数相加结果
}

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值