2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > C语言位运算的加法(详解)

C语言位运算的加法(详解)

时间:2019-07-19 14:08:15

相关推荐

C语言位运算的加法(详解)

一.知识点

要了解c语言的位运算,首先要知道几个逻辑运算符:

运算符含义描述

&按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0

|按位或两个相应的二进制位中只要有一个为1,该位的结果值为1

^按位异或若参加运算的两个二进制位值相同则为0,否则为1

~取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0

<<左移用来将一个数的各二进制位全部左移N位,右补0

>>右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

简单的总结一下:

把1和0当作是电路开关的闭和开,那么逻辑与相当于串联,需要开关全部闭合才为1,即通路;

逻辑或相当于电路上的并联操作,只要有一个开关闭合就相当于电路通路,即为1,所以逻辑或就是有1为1,其他都为0

逻辑异或就是只要1和0同时出现,即使电路通路,为1,其他都为0

二.c语言的位运算加法

371. 两整数之和

给你两个整数ab不使用运算符+-​​​​​​​,计算并返回两整数之和。

int getSum(int a, int b){while(b){unsigned int temp = (unsigned int)(a & b) << 1;//逻辑与即用来判断是否需要进位,<<用来进位a = a ^ b;//逻辑异或即用来加b = temp;}return a;}计算2+3=?0010and 0011-----------0010再向左移一位即变为0100进行异或运算即相加00100011--------0001我们首先用逻辑与判断是非需要进位,如果要进位将结果向左进一位,得出的结果是0100再进行异或运算相加,得到的结果为0001最后将0100和0001进行异或运算即得到结果为0101

刚开始有点难理解,其实位运算加法的套路可以由上代码进行套取计算,相当于模板一样

与运算就是进位,异或就是相加。位运算的加法总的来说就是这两步,判断需要进位后用左移<<向前进位。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。