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

本文概述

  • C ++
  • Java
  • Python3
  • C#
  • C ++
  • C
给定整数n和其中的两个比特位置p1和p2, 在给定位置交换比特。给定位置来自最低有效位(lsb)。例如, lsb的位置为0。
例子:
Input: n = 28, p1 = 0, p2 = 3Output: 2128 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 = 3Output: 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

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

    推荐阅读