बिट रोटेशन
- लेफ्ट रोटेशन: बिट्स बाएं से दाएं शिफ्ट होते हैं, MSB से निकला बिट LSB पर आता है।
- राइट रोटेशन: बिट्स दाएं से बाएं शिफ्ट होते हैं, LSB से निकला बिट MSB पर आता है।
लेफ्ट रोटेशन प्रोग्राम
#include <stdio.h>
#include <stdlib.h>
int main() {
int number, rotate, msb, size;
printf("Enter any number: ");
scanf("%d", &number);
printf("Enter number of rotations: ");
scanf("%d", &rotate);
size = sizeof(int) * 8; // 32
rotate %= size; // रोटेशन को साइज के भीतर लाएं
while(rotate--) {
msb = (number >> (size - 1)) & 1; // MSB निकालें
number = (number << 1) | msb; // लेफ्ट शिफ्ट और MSB को LSB पर रखें
}
printf("After left rotation: %d\n", number);
return 0;
}
आउटपुट
Enter any number: 12 Enter number of rotations: 2 After left rotation: 48
व्याख्या
12 = 0000...001100 (बाइनरी)
1 रोटेशन: 0000...011000 = 24
2 रोटेशन: 0000...110000 = 48
राइट रोटेशन प्रोग्राम
#include <stdio.h>
#include <stdlib.h>
int main() {
int number, rotate, lsb, size;
printf("Enter any number: ");
scanf("%d", &number);
printf("Enter number of rotations: ");
scanf("%d", &rotate);
size = sizeof(int) * 8;
rotate %= size;
while(rotate--) {
lsb = number & 1; // LSB निकालें
number = (number >> 1) | (lsb << (size - 1)); // राइट शिफ्ट और LSB को MSB पर रखें
}
printf("After right rotation: %d\n", number);
return 0;
}
आउटपुट
Enter any number: 18 Enter number of rotations: 2 After right rotation: 4
व्याख्या
18 = 0000...010010
1 रोटेशन: 0000...001001 = 9
2 रोटेशन: 0000...000100 = 4
सामान्य रोटेशन फंक्शन
unsigned int rotate_left(unsigned int x, int n) {
int size = sizeof(x) * 8;
n %= size;
return (x << n) | (x >> (size - n));
}
unsigned int rotate_right(unsigned int x, int n) {
int size = sizeof(x) * 8;
n %= size;
return (x >> n) | (x << (size - n));
}
उपयोग केस
- क्रिप्टोग्राफी (AES, SHA आदि)
- हैश फंक्शन्स
- बिटबोर्ड ऑपरेशन्स (गेम प्रोग्रामिंग)
- सर्कुलर बफर इंडेक्सिंग