旋转数字的位

位旋转:旋转(或循环移位)是一种类似于移位的操作,只是一端脱落的位被放回另一端。 在向左旋转时,从左端脱落的钻头被放回右端。 在右旋转中,从右端脱落的钻头放回左端。

null

例子: 设n用8位存储。n=11100101向左旋转3会使n=00101111(左移3位,前3位放回最后一位)。如果使用16位或32位存储n,则n(000…11100101)的左旋转变为00。。00 11100101 0 如果使用8位存储n,则n=11100101的右转为3表示n=10111100(右移3位,最后3位放回第一位)。如果n是使用16位或32位存储的,则n(000…11100101)的右旋转为3 101 000..00 11100 .

C++

// C++ code to rotate bits
// of number
#include<iostream>
using namespace std;
#define INT_BITS 32
class gfg
{
/*Function to left rotate n by d bits*/
public :
int leftRotate( int n, unsigned int d)
{
/* In n<<d, last d bits are 0. To
put first 3 bits of n at
last, do bitwise or of n<<d
with n >>(INT_BITS - d) */
return (n << d)|(n >> (INT_BITS - d));
}
/*Function to right rotate n by d bits*/
int rightRotate( int n, unsigned int d)
{
/* In n>>d, first d bits are 0.
To put last 3 bits of at
first, do bitwise or of n>>d
with n <<(INT_BITS - d) */
return (n >> d)|(n << (INT_BITS - d));
}
};
/* Driver code*/
int main()
{
gfg g;
int n = 16;
int d = 2;
cout << "Left Rotation of " << n <<
" by " << d << " is " ;
cout << g.leftRotate(n, d);
cout << "Right Rotation of " << n <<
" by " << d << " is " ;
cout << g.rightRotate(n, d);
getchar ();
}
// This code is contributed by SoM15242


C

#include<stdio.h>
#define INT_BITS 32
/*Function to left rotate n by d bits*/
int leftRotate( int n, unsigned int d)
{
/* In n<<d, last d bits are 0. To put first 3 bits of n at
last, do bitwise or of n<<d with n >>(INT_BITS - d) */
return (n << d)|(n >> (INT_BITS - d));
}
/*Function to right rotate n by d bits*/
int rightRotate( int n, unsigned int d)
{
/* In n>>d, first d bits are 0. To put last 3 bits of at
first, do bitwise or of n>>d with n <<(INT_BITS - d) */
return (n >> d)|(n << (INT_BITS - d));
}
/* Driver program to test above functions */
int main()
{
int n = 16;
int d = 2;
printf ( "Left Rotation of %d by %d is " , n, d);
printf ( "%d" , leftRotate(n, d));
printf ( "Right Rotation of %d by %d is " , n, d);
printf ( "%d" , rightRotate(n, d));
getchar ();
}


JAVA

// Java code to rotate bits
// of number
class GFG
{
static final int INT_BITS = 32 ;
/*Function to left rotate n by d bits*/
static int leftRotate( int n, int d) {
/* In n<<d, last d bits are 0.
To put first 3 bits of n at
last, do bitwise or of n<<d with
n >>(INT_BITS - d) */
return (n << d) | (n >> (INT_BITS - d));
}
/*Function to right rotate n by d bits*/
static int rightRotate( int n, int d) {
/* In n>>d, first d bits are 0.
To put last 3 bits of at
first, do bitwise or of n>>d
with n <<(INT_BITS - d) */
return (n >> d) | (n << (INT_BITS - d));
}
// Driver code
public static void main(String arg[])
{
int n = 16 ;
int d = 2 ;
System.out.print( "Left Rotation of " + n +
" by " + d + " is " );
System.out.print(leftRotate(n, d));
System.out.print( "Right Rotation of " + n +
" by " + d + " is " );
System.out.print(rightRotate(n, d));
}
}
// This code is contributed by Anant Agarwal.


蟒蛇3

# Python3 code to
# rotate bits of number
INT_BITS = 32
# Function to left
# rotate n by d bits
def leftRotate(n, d):
# In n<<d, last d bits are 0.
# To put first 3 bits of n at
# last, do bitwise or of n<<d
# with n >>(INT_BITS - d)
return (n << d)|(n >> (INT_BITS - d))
# Function to right
# rotate n by d bits
def rightRotate(n, d):
# In n>>d, first d bits are 0.
# To put last 3 bits of at
# first, do bitwise or of n>>d
# with n <<(INT_BITS - d)
return (n >> d)|(n << (INT_BITS - d)) & 0xFFFFFFFF
# Driver program to
# test above functions
n = 16
d = 2
print ( "Left Rotation of" ,n, "by"
,d, "is" ,end = " " )
print (leftRotate(n, d))
print ( "Right Rotation of" ,n, "by"
,d, "is" ,end = " " )
print (rightRotate(n, d))
# This code is contributed by
# Smitha Dinesh Semwal


C#

// C# program to rotate
// bits of a number
using System;
class GFG
{
static int INT_BITS = 32;
/* Function to left rotate n by d bits*/
static int leftRotate( int n, int d) {
/* In n<<d, last d bits are 0.
To put first 3 bits of n at
last, do bitwise or of n<<d with
n >>(INT_BITS - d) */
return (n << d) | (n >> (INT_BITS - d));
}
/*Function to right rotate n by d bits*/
static int rightRotate( int n, int d) {
/* In n>>d, first d bits are 0.
To put last 3 bits of at
first, do bitwise or of n>>d
with n <<(INT_BITS - d) */
return (n >> d) | (n << (INT_BITS - d));
}
// Driver code
public static void Main()
{
int n = 16;
int d = 2;
Console.Write( "Left Rotation of " + n
+ " by " + d + " is " );
Console.Write(leftRotate(n, d));
Console.Write( "Right Rotation of " + n
+ " by " + d + " is " );
Console.Write(rightRotate(n, d));
}
}
// This code is contributed by Sam007


Javascript

<script>
// JavaScript code to rotate bits
// of number
let INT_BITS = 32;
/*Function to left rotate n by d bits*/
function leftRotate( n,  d)
{
/* In n<<d, last d bits are 0. To
put first 3 bits of n at
last, do bitwise or of n<<d
with n >>(INT_BITS - d) */
return (n << d)|(n >> (INT_BITS - d));
}
/*Function to right rotate n by d bits*/
function rightRotate( n, d)
{
/* In n>>d, first d bits are 0.
To put last 3 bits of at
first, do bitwise or of n>>d
with n <<(INT_BITS - d) */
return (n >> d)|(n << (INT_BITS - d));
}
/* Driver code*/
let n = 16;
let d = 2;
document.write( "Left Rotation of " + n +
" by " + d + " is " );
document.write(leftRotate(n, d));
document.write( "<br>" );
document.write( "Right Rotation of " + n +
" by " + d + " is " );
document.write(rightRotate(n, d));
</script>


输出:

Left Rotation of 16 by 2 is 64Right Rotation of 16 by 2 is 4

时间复杂性: O(1)

辅助空间: O(1)

对于16位数字:

C++

#include <bits/stdc++.h>
using namespace std;
#define SHORT_SIZE 16
// function to rotate the given unsigned short
// in the left direction
unsigned short leftRotate(unsigned short x, short d)
{
/**
* By doing x << d, we move the first(right most) d bits
* to the left most d bits, and at the same time we move
* the left most d bits to the right side,
* performing OR operation between the two gives use the
* required result.
* */
return (x << d) | (x >> (SHORT_SIZE - d));
}
// function to rotate the given unsigned short
// in the right direction
unsigned short rightRotate(unsigned short x, short d)
{
/**
* By doing x >> d, we move the first(left most) d bits
* to the right most d bits, and at the same time we move
* the right most d bits to the right side,
* performing OR operation between the two gives use the
* required result.
* */
return (x >> d) | (x << (SHORT_SIZE - d));
}
/* Driver program to test above functions */
int main()
{
// Test case
unsigned short n = 28;
short d = 2;
cout << leftRotate(n, d) << endl;
cout << rightRotate(n, d) << endl;
return 0;
}
// This code is contributed by ganesh227


C

#include <stdio.h>
#define SHORT_SIZE 16
// function to rotate the given unsigned short
// in the left direction
unsigned short leftRotate(unsigned short x, short d)
{
/**
* By doing x << d, we move the first(right most) d bits
* to the left most d bits, and at the same time we move
* the left most d bits to the right side,
* performing OR operation between the two gives use the
* required result.
* */
return (x << d) | (x >> (SHORT_SIZE - d));
}
// function to rotate the given unsigned short
// in the right direction
unsigned short rightRotate(unsigned short x, short d)
{
/**
* By doing x >> d, we move the first(left most) d bits
* to the right most d bits, and at the same time we move
* the right most d bits to the right side,
* performing OR operation between the two gives use the
* required result.
* */
return (x >> d) | (x << (SHORT_SIZE - d));
}
/* Driver program to test above functions */
int main()
{
// Test case
unsigned short n = 28;
short d = 2;
printf ( "%d" , leftRotate(n, d));
printf ( "%d" , rightRotate(n, d));
return 0;
}
// This code is contributed by ganesh227


JAVA

/*package whatever //do not write package name here */
import java.io.*;
class GFG {
public static void main (String[] args) {
int N= 28 ;
int D= 2 ;
rotate(N,D);
}
static void rotate( int N, int D)
{
// your code here
int t= 16 ;
int left= ((N<<D) | N>>(t-D)) & 0xFFFF ;
int right=((N>>D) | N<<(t-D)) & 0xFFFF ;
System.out.println(left);
System.out.println(right);
}
}


蟒蛇3

SHORT_SIZE = 16
# function to rotate the given unsigned short
# in the left direction
def leftRotate(x, d):
return (x << d) | (x >> (SHORT_SIZE - d))
# function to rotate the given unsigned short
# in the right direction
def rightRotate(x, d):
return (x >> d) | (x << (SHORT_SIZE - d)) & 0xDDDDDF
# Driver program to test above functions
# Test case
n = 28
d = 2
print ( "Left Rotation of" ,n, "by"
,d, "is" ,end = " " )
print (leftRotate(n, d))
print ( "Right Rotation of" ,n, "by"
,d, "is" ,end = " " )
print (rightRotate(n, d))
# This code is contributed by shivanisinghss2110


C#

/*package whatever //do not write package name here */
using System;
using System.Collections.Generic;
public class GFG {
public static void Main(String[] args) {
int N = 28;
int D = 2;
rotate(N, D);
}
// Driver code
static void rotate( int N, int D)
{
int t = 16;
int left = ((N<<D) | N>>(t-D)) & 0xFFFF;
int right = ((N>>D) | N<<(t-D)) & 0xFFFF;
Console.WriteLine(left);
Console.WriteLine(right);
}
}
// This code is contributed by umadevi9616


Javascript

<script>
function rotate(N,D)
{
// your code here
let t = 16;
let left = ((N<<D) | N>>(t-D)) & 0xFFFF;
let right = ((N>>D) | N<<(t-D)) & 0xFFFF;
document.write(left + "<br>" );
document.write(right + "<br>" );
}
let N = 28;
let D = 2;
rotate(N, D);
// This code is contributed by avanitrachhadiya2155
</script>


Left Rotation of 28 by 2 is 112Right Rotation of 28 by 2 is 7

时间复杂性 :O(1)

空间复杂性 :O(1)

如果您在上述程序中发现任何错误或其他解决相同问题的方法,请写评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享