1.操作符介绍

~取反:不会改变原值,如果想改变原值,请使用val ~=val

&位与:都真才真

|位或:有真就真

^位异或:两个不一样就为真

左移<<:补0

右移>>:无符号数补0,有符号数不一定

2.求截断(位与)

例如,想求得flag的后八位

掩码为:MASK = 11111111

测试为:flag = 1000100010001000

flag = flag & MASK;//0000000010001000

3.打开位(位或)

例如,想将flag的第2位设为1(从0开始)

掩码为:MASK = 00000100

测试为:flag = 10101000

flag = flag | MASK;//10101100

4.关闭位(位与)

例如:想将flag的第2位设置为0

掩码为:MASK = 11111011

测试为:flag = 10101100

flag = flag & MASK;//10101000

5.转置位(位异或)

例如:想将flag的第2为转置

掩码为:MASK = 00000100

测试为:flag = 10101100

flag = flag ^ MASK;//10101000

6.查看位(位与)

例如:判断flag的第二位是否为1

MASK = 00000100

if((flag & MASK) == MASK);//先屏蔽再查看

7.实例(将数字转换为二进制表示形式)

 

  1. #include<stdio.h> 
  2.  
  3. void ToBinary(int n,char *ptr); 
  4. void showBinary(char *ptr); 
  5.  
  6. int main(void){ 
  7.     int n; 
  8.     char nToBinary[8*sizeof(int)+1];//存储二进制形式的字符数组,多出一位存储终止符  
  9.      
  10.     puts("Enter a number"); 
  11.     while(scanf("%d",&n) == 1){ 
  12.         ToBinary(n,nToBinary); 
  13.         showBinary(nToBinary); 
  14.         puts("Enter a number"); 
  15.     } 
  16.     puts("Bye"); 
  17.     getchar(); 
  18.     return 0; 
  19. void ToBinary(int n,char *ptr){ 
  20.      int index; 
  21.       
  22.      for(index=(8*sizeof(int))-1;index>=0;index--){//从后向前赋值  
  23.          ptr[index] = '0' + (1&n);//得到最后一位的二进制形式,加'0'转换为字符  
  24.          n = n>>1;//右移一位 ,如果采取左移,则比较的数是1000000....共31个0十分不方便  
  25.      } 
  26.      ptr[8*sizeof(int)] = '\0';//最后将终止符添加上  
  27. void showBinary(char *ptr){ 
  28.      int i = 1; 
  29.      char ch; 
  30.      while(putchar(*ptr++)){ 
  31.          if(i++ % 4 == 0){//每四位输出一个空格,从1开始  
  32.              putchar(' '); 
  33.          } 
  34.      } 

8.实例