如何交换给定整数中的两位?

2021年3月13日15:46:48 发表评论 762 次浏览

本文概述

给定整数n和其中的两个比特位置p1和p2, 在给定位置交换比特。给定位置来自最低有效位(lsb)。例如, lsb的位置为0。

例子:

Input: n = 28, p1 = 0, p2 = 3
Output: 21
28 in binary is 11100.  If we swap 0'th and 3rd digits, we get 10101 which is 21 in decimal.

Input: n = 20, p1 = 2, p2 = 3
Output: 24

我们强烈建议你最小化浏览器, 然后自己尝试。

方法1:

这个想法是首先找到这些位, 然后使用

基于异或的交换概念

, 即要交换两个数字" x"和" y", 我们执行x = x ^ y, y = y ^ x和x = x ^ y。

下面是上述想法的实现

C ++

// C program to swap bits in an integer
#include<stdio.h>
  
// This function swaps bit at positions p1 and p2 in an integer n
int swapBits(unsigned int n, unsigned int p1, unsigned int p2)
{
     /* Move p1'th to rightmost side */
     unsigned int bit1 =  (n >> p1) & 1;
  
     /* Move p2'th to rightmost side */
     unsigned int bit2 =  (n >> p2) & 1;
  
     /* XOR the two bits */
     unsigned int x = (bit1 ^ bit2);
  
     /* Put the xor bit back to their original positions */
     x = (x << p1) | (x << p2);
  
     /* XOR 'x' with the original number so that the
        two sets are swapped */
     unsigned int result = n ^ x;
}
  
/* Driver program to test above function*/
int main()
{
     int res =  swapBits(28, 0, 3);
     printf ( "Result = %d " , res);
     return 0;
}

Java

// Java program to swap bits in an integer
import java.io.*;
  
class GFG 
{
      
// This function swaps bit at 
// positions p1 and p2 in an integer n
static int swapBits( int n, int p1, int p2)
{
     /* Move p1'th to rightmost side */
     int bit1 = (n >> p1) & 1 ;
  
     /* Move p2'th to rightmost side */
     int bit2 = (n >> p2) & 1 ;
  
     /* XOR the two bits */
     int x = (bit1 ^ bit2);
  
     /* Put the xor bit back to
     their original positions */
     x = (x << p1) | (x << p2);
  
     /* XOR 'x' with the original
     number so that the
     two sets are swapped */
     int result = n ^ x;
     return result;
}
  
     /* Driver code*/
     public static void main (String[] args)
     {
         int res = swapBits( 28 , 0 , 3 );
         System.out.println ( "Result = " + res);
     }
}
  
// This code is contributed by ajit..

Python3

# Python3 program to swap bits in an integer 
  
# This function swaps bit at positions
# p1 and p2 in an integer n 
def swapBits(n, p1, p2):
      
     ''' Move p1'th to rightmost side '''
     bit1 = (n >> p1) & 1
  
     ''' Move p2'th to rightmost side '''
     bit2 = (n >> p2) & 1
  
     ''' XOR the two bits '''
     x = (bit1 ^ bit2)
  
     ''' Put the xor bit back to their 
         original positions '''
     x = (x << p1) | (x << p2)
  
     ''' XOR 'x' with the original number 
         so that thetwo sets are swapped '''
     result = n ^ x
     return result
      
# Driver Code
res = swapBits( 28 , 0 , 3 ) 
print ( "Result =" , res) 
  
# This code is contributed by SHUBHAMSINGH10

C#

// C# program to swap bits in an integer
using System;
  
class GFG
{
          
// This function swaps bit at positions 
// p1 and p2 in an integer n
static int swapBits( int n, int p1, int p2)
{
     /* Move p1'th to rightmost side */
     int bit1 = (n >> p1) & 1;
  
     /* Move p2'th to rightmost side */
     int bit2 = (n >> p2) & 1;
  
     /* XOR the two bits */
     int x = (bit1 ^ bit2);
  
     /* Put the xor bit back to
     their original positions */
     x = (x << p1) | (x << p2);
  
     /* XOR 'x' with the original
     number so that the
     two sets are swapped */
     int result = n ^ x;
     return result;
}
  
/* Driver code*/
static public void Main ()
{
     int res = swapBits(28, 0, 3);
     Console.WriteLine( "Result = " + res);
}
}
  
// This code is contributed by akt_mit

输出如下:

Result = 21

方法2:

仅使用左移和XOR运算符可以解决此问题。这个想法是通过将所需的次数左移1次并使用XOR运算符来设置/取消设置第(p1)位和第(p2)位

(num = num ^(1 << bit_position))

.

下面是上述代码的实现。

C ++

//C++ code for swapping given bits of a number
#include<iostream>
using namespace std;
int swapBits( int n, int p1, int p2)
{
     //left-shift 1 p1 and p2 times 
     //and using XOR
     n ^= 1 << p1;
     n ^= 1 << p2;
     return n;
}
  
//Driver Code
int main()
{
     cout << "Result = " << swapBits(28, 0, 3);
     return 0;
}
  
//This code is contributed by yashbeersingh42

C

//C code for swapping given bits of a number
#include<stdio.h>
int swapBits( int n, int p1, int p2)
{
     //left-shift 1 p1 and p2 times 
     //and using XOR
     n ^= 1 << p1;
     n ^= 1 << p2;
     return n;
}
  
//Driver Code
int main()
{
     printf ( "Result = %d" , swapBits(28, 0, 3));
     return 0;
}
  
//This code is contributed by yashbeersingh42
Output:
Result = 21

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: