栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/723112.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号