c语言————-位操作符讲解

位操作符(只可作用于整数)

      按位与&

           二进制形式中两个都为1则为1

                  只要有一个0就为0   

例:a=5   b=-3   

       a的补码:

   00000000 00000000 00000000 00000101

      b的补码计算:

原码: 10000000 00000000 00000000 00000011

反码:11111111 11111111 11111111 11111100

补码:11111111 11111111 11111111 11111011

     a&b:

   00000000 00000000 00000000 00000101

                                        +

    11111111 11111111 11111111 11111011

                                       =

   00000000 00000000 00000000 00000001

   


      按位或|:

               二进制形式中两个都为0则为0

                   只要有一个1就为1 

例:a=5   b=-3   

       a的补码:

   00000000 00000000 00000000 00000101

      b的补码计算:

原码: 10000000 00000000 00000000 00000011

反码:11111111 11111111 11111111 11111100

补码:11111111 11111111 11111111 11111011

     a|b:

   00000000 00000000 00000000 00000101

                                        +

    11111111 11111111 11111111 11111011

                                       =

   11111111 11111111 11111111 11111111 


       按位异或(^):

            二进制形式中两个数相同则为0

                    两个数不同则为1

    

例:a=5   b=-3   

       a的补码:

   00000000 00000000 00000000 00000101

      b的补码计算:

原码: 10000000 00000000 00000000 00000011

反码:11111111 11111111 11111111 11111100

补码:11111111 11111111 11111111 11111011

     a^b:

   00000000 00000000 00000000 00000101

                                        +

    11111111 11111111 11111111 11111011

                                       =

   11111111 11111111 11111111 11111110


案例分析:

求一个数二进制序列中1的个数

int main(){
       int i,j,count =0;

       scanf("%d",i);

      for(j=0;j<32;j++){
                if(((i>>j)&1)==1)

                      count ++;

          }
        printf ("%d",count);

        return 0;

 }

  

 

 

你可能感兴趣的