按位运算

C语言提供了6个位操作运算符,只能作用于整型操作数,即只作用于带符号或无符号的char、short、int、long。

&    按位与(AND)

!      按位或(OR)

^     按位异或(XOR)

<<   左移

>>   右移

~     按位求反(一元运算符)

按位与运算符&经常用于屏蔽某些二进制位,例如:

       n = n & 01777

按位异或:当两个操作数的对应位不同时将该位设置为1,否则为0。

int x = 1;
int y = 2;
x & y; //0
x && y ;     //1
x     0000 0001
&
y     0000 0010
=     0000 0000

左移右移:移动的位数由右操作数指定(右操作数的值必须是非负值)。

x<<2把x的值左移2位,右边空出的2位补0。

x = 1;  0000 0001

x << 2 => 00 000100  => 4     <=>等价对左操作数乘以4

对unsigned类型的无符号值右移时,左边空出的部分补0;对signed类型的带符号值进行右移时,某些机器将对左边空出的部分用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分补0(即“逻辑移位”)。

一元运算符~用于求整数的二进制反码,即分别将操作数各二进制位上的1变0,0变1。

x = 1;

x = x & ~077=>1 & ~(1001101) => 1 & 0110010 => 0000001 & 0110010 => 0

以下函数暂时没搞懂

 1 #include <stdio.h>
 2 unsigned getbits(unsigned x, int p, int n);
 3 main(){
 4     int x = 123456789,y = 5, z = 2;
 5     int i = getbits(x,y,z);
 6     printf("%d\n",i);     
 7     return 0;
 8 }
 9  /**********返回x中从第p位开始的n位**********/
10  unsigned getbits(unsigned x, int p, int n){
11      return (x >> (p+1-n)) & ~(~0 << n);
12  }
View Code

相关文章:

  • 2021-08-03
  • 2022-01-07
  • 2021-06-13
  • 2021-09-25
  • 2021-06-04
  • 2021-12-03
  • 2022-03-03
  • 2021-06-25
猜你喜欢
  • 2021-06-24
  • 2022-01-22
  • 2022-01-06
  • 2021-08-19
  • 2022-01-22
  • 2021-10-18
  • 2022-01-31
相关资源
相似解决方案