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

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

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,得到的无进位相加的结果即为两个数相加结果
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5718666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存