当前位置:网站首页>Bit operation skills

Bit operation skills

2022-07-05 04:06:00 Phyllostachys pubescens

-------------------------
 Judge odd and even numbers 
	1110   1111
	0001   0001
	0000   0001    // if((a&1)==0){}
-------------------------
 Exchange two numbers 

   1001     a
   1010     b
   0011     a=a^b
   1010     b
   1001     b=a^b
  
   0011
   1001
   1010     a=a^b


----------------------------
 Multiplication and division 
100>>1   10   // 4->2
100<<1   1000   //4->8

--------------------------------
 Exchange symbols 
 0 1000    Take the opposite 
 1 0111   +1
 1 1000

---------------------------------
 High low swap   a=(a<<4)|(a>>4)
 1100 1011

 a>>4
 0000 1100
 a>>4
 1011 0000
  Take or 
 1011 1100


------------------------
 Statistics 1 The number of   

1011   a&(a-1)
1010
       1010
       1001     a&(a-1)
                1000
 One less for each execution 1 
-----------------------------

-----------------------------
 Binary addition   5+3 

	0101        0101
	0011        0011
^   0110        0001 <<1 0010
public int add(int a, int b){
    
	int a=a^b;
	int b=a&b;
	b<<1;
	if(b==0) return 0;
	else{
    
	return Add(a,b);
	}
}

----------------------------------
 Only once ,  Other numbers appear 2 Time 

1101
0000
1101
0 And any number  ^  For itself 

1101
1101
0000
 Two identical numbers  ^  The result is  0 
  Method :  use 0 And each value in the array ^ operation , The result of the operation is the number that occurs once  
 ---------------------------------------------------------------
  Only once ,  Other numbers appear 3 Time 

 In the specific operation implementation , The data in the array is given in the problem int Within limits ,
 So we can implement int Of 32 Each bit is judged in turn 1 The remainder of the number of 3 Is it 1,
 If 1 The result shows that the bit is 1 You can add the results . The final value is the answer 、

class Solution {
    
    public int singleNumber(int[] nums) {
    
        int value=0;
        for(int i=0;i<32;i++)
        {
    
            int sum=0;
            for(int num:nums)
            {
    
                if(((num>>i)&1)==1)
                {
    
                    sum++;
                }
            }
            if(sum%3==1)
                value+=(1<<i);
        }
        return value;
    }
}

// Bit operation to achieve multiplication and division 
int a=2;
a>>1;       // Move right 1 position ,  It's equivalent to dividing 2 , The result is 1
a<<1;       // Move left 1 position ,  It's equivalent to riding 2 , The result is 4

// Bit operations swap two numbers , No need for temporary variables , Efficiency is higher than ordinary operation 
void Swap(int &a, int &b){
    
	a=a+b;
	b=a-b;
	a=a-b;
}

void swap(int &a,int &b){
    
	a=(a^b);
	b=(b^a);
	a=(a^b);
}


// Judge odd and even numbers 
if(0==(a&1){
    
  // even numbers 
}

// Bit operation exchange symbol 
int reversal(int a){
    
 return ~a +1;
}

// Bit operation to find the absolute value 
int abs(int a){
    
	int i=a>>31;
	return i==0?a:(~a+1);
}

// Bit operation for high and low bit switching 
unsigned short a=34520;
a=(a>>8)|(a<<8)

// Bit operation in binary reverse order 
unsigned short a = 34520;

a = ((a & 0xAAAA) >> 1) | ((a & 0x5555) << 1);
a = ((a & 0xCCCC) >> 2) | ((a & 0x3333) << 2);
a = ((a & 0xF0F0) >> 4) | ((a & 0x0F0F) << 4);
a = ((a & 0xFF00) >> 8) | ((a & 0x00FF) << 8);

// In statistical binary 1 The number of 
count = 0  
while(a){
      
  a = a & (a - 1);   // One less for each execution 1
  count++;  
}  


// Eliminate the last one 1
x=1100
x-1=1011
x&(x-1)=1000

// a&b&b =a



原网站

版权声明
本文为[Phyllostachys pubescens]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140710257071.html