【C语言】<2>位运算

版权声明:如有帮助,欢迎转发 https://blog.csdn.net/qq_39785575/article/details/79954791

位运算是指以二进制位为对象的运算,指针运算和位运算往往是编写系统软件所需要的。在计算机用于检测和控制领域也要用到位运算的知识。
位运算符当中除了~以外都是双目运算符;参加位运算的只能是整型或者字符型数据。

## 按位与运算 ##
运算符为“&”,参与运算的两个数据,按二进制位进行“与”运算。如果相应的两个二进制位都是1,则该位的结果为1,否则为0。如果参与“&”运算的是负数,(如-7&-5),则以补码形式表示为二进制数,然后按位进行“&”运算
即:0&0=0 1&0=0 0&1=0 1&1=1。
例如:7&5结果是5(处理7和5的相应二进制位);
特殊应用:
1,将某一个单元清为零:即使其全部二进制位为零,只要找一个数满足以下条
件,原数中为1的位,该数中相应位全为0,然后将二者进行与运算。
2,取一个数中的指定位。
3,要想将哪一位保留下来,就与一个数进行“&”运算,此数在该位取1。

##按位或运算##
运算符为“|” ,规则是:两个对应的二进制位中只要有一个为1,该位的结果值为1,即: 1|1=1 1|0=1 0|1=1 0|0=0。
用途:按位或运算符常用来对一个数据的某些位定值为1。例如:a是一个整数,有表达式:a|0377,则低八位全置为一,高八位保留原样。

##异或运算##
运算符”^” 规则是:若参加运算的两个二进制位异号,得到1,若同号,得到0。即:1^1=0 1^0=1 0^0=0 0^1=1。
“异或”的意思是判断两个相应的位值是否为异,为“异”就取1,否则为0。
应用:
1,使特定位翻转,要使哪一位翻转就将与其进行^运算的数在该位取1。
2,与0相^,保留原值。
3,交换两个值,不用临时变量:a=a^b; b=b^a; a=a^b;

##取反运算##
运算符为“~” 单目运算符,运来对一个二进制数按位取反,即将0变成1,1变成0。
作用:a=a & ~1;将16位或者32位存放的整数a最后一位变成0。

##左移运算##
运算符为“<<”,用来将一个数的二进制位全部左移若干位,高位左移后溢出,舍弃。例如:a=a<<2; 若a为15,则运算后a为60。当左移时被溢出舍弃的高位中不包含1时,左移n位相当于该数乘以2的n次方。左移比乘法运算快得多、

##右移运算##
运算符为“>>”,a>>2;表示将a的二进制位右移两位,移到右端的低位被舍弃,对无符号数,高位补0;对于有符号整数,如果符号位原来为0,高位补0,如果符号位为1,高位补0还是1,取决于计算机系统。

如果两个数据长度不同,进行位运算时,系统会将二者按右端对齐。例如(a&b,a为short类型,b为int类型),如果a为正数,则左侧十六位补满0;若a为负数,左端应补满1,如果a为无符号整数型,则左侧填满0。

阅读更多

扫码向博主提问

视觉_算法进行中

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • 计算机视觉
  • 算法
去开通我的Chat快问
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页