首页 / 更多教程 / 位操作实现加减乘除四则运算
位操作实现加减乘除四则运算
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了位操作实现加减乘除四则运算,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1036字,纯文字阅读大概需要2分钟。
内容图文
![位操作实现加减乘除四则运算](/upload/InfoBanner/zyjiaocheng/1108/15338f177382484f8bde19e2af4bc64c.jpg)
解决方案
需要熟练掌握一些常见的位操作实现,具体为:
1)常用的等式:-n=~(n-1)=~n+1
2)获取整数n的二进制中最后一个1:n&(-n)或者n&~(n-1)如:n=010100,则-n=101100,n&(-n)=000100
3)去掉整数n的二进制中最后一个1:n&(n-1),如:n=010100,n-1=010011,n&(n-1)=010000
1 利用位运算实现加法
由于我们不能使用任何算术运算符,因此可供我们使用的就只有位运算符了。 于是我们把操作数看成二进制表示,然后对它们做类似的操作:
- 不考虑进位的按位求和,(0,0),(1,1)得0,(1,0),(0,1)得1, 使用异或操作可以满足要求。
- 只考虑进位,只有(1,1)才会产生进位,使用按位与可以满足要求。 当前位产生进位,要参与高一位的运算,因此按位与后要向左移动一位。
- 递归求和,直到进位为0
实现代码:
int add(int a,int b)
{
int carry,add;
do{
add=a^b;
carry=(a&b)<<1;
a=add;
b=carry;
}while(carry!=0);
return add;
}
2 减法实现
减法和容易地转换为加法:a-b=a+(-b)=a+(~b+1)
int subtract(int a,int b)
{
return add(a,add(~b,1));
}
3 乘法实现
乘法的实现可以转换成:k31*(2^31)+k30*(2^30)+...+k2*(2^2)+k1*(x^1)+k0*(x^0);其中k0~k31取0或者1
//
正整数的乘法
int multiply(int a,int b)
{
int ans=0;
while(b)
{
if(b&1)
ans=add(ans,a);
a=a<<1;
b=b>>1;
}
return ans;
}
4 除法实现
int divide(int a,int b)
{
int count=0;
while(a>=b)
{
a=subtract(a,b);
count=add(count,1);
}
return count;
}
原文:http://www.cnblogs.com/wuchanming/p/4359341.html
内容总结
以上是互联网集市为您收集整理的位操作实现加减乘除四则运算全部内容,希望文章能够帮你解决位操作实现加减乘除四则运算所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。