বিট রোটেশন (Bit Rotation) কী?
বিট রোটেশনে বিটগুলো চক্রাকারভাবে শিফট হয় — এক প্রান্ত থেকে বের হয়ে অন্য প্রান্তে যোগ হয়। শিফটিংয়ের মতো বিট হ্রাস হয় না।
- লেফট রোটেশন: বিটগুলো বামে শিফট, MSB বের হয়ে LSB-এ যোগ হয়।
- রাইট রোটেশন: বিটগুলো ডানে শিফট, LSB বের হয়ে MSB-এ যোগ হয়।
লেফট রোটেশন লজিক
MSB = (num >> (size-1)) & 1; // MSB ক্যাপচার
num = (num << 1) | MSB; // বামে শিফট + MSB LSB-এ যোগ
রাইট রোটেশন লজিক
LSB = num & 1; // LSB ক্যাপচার
num = (num >> 1) | (LSB << (size-1)); // ডানে শিফট + LSB MSB-এ যোগ
প্রোগ্রাম ১: লেফট রোটেশন
#include <stdio.h>
#include <stdlib.h>
int main() {
int num, rotate;
int size = sizeof(int) * 8; // 32 bits
printf("Enter number: ");
scanf("%d", &num);
printf("Enter rotations: ");
scanf("%d", &rotate);
rotate %= size; // রোটেশন সংখ্যা নরমালাইজ
while (rotate--) {
int msb = (num >> (size - 1)) & 1;
num = (num << 1) | msb;
}
printf("After left rotation: %d\n", num);
return 0;
}
আউটপুট
Enter number: 12 Enter rotations: 2 After left rotation: 48
ব্যাখ্যা: ১২ = 00001100 (৮-বিট ভিউ)। ২বার লেফট রোটেট → 00110000 = ৪৮।
প্রোগ্রাম ২: রাইট রোটেশন
#include <stdio.h>
#include <stdlib.h>
int main() {
int num, rotate;
int size = sizeof(int) * 8;
printf("Enter number: ");
scanf("%d", &num);
printf("Enter rotations: ");
scanf("%d", &rotate);
rotate %= size;
while (rotate--) {
int lsb = num & 1;
num = (num >> 1) | (lsb << (size - 1));
}
printf("After right rotation: %d\n", num);
return 0;
}
আউটপুট
Enter number: 18 Enter rotations: 2 After right rotation: 4
ব্যাখ্যা: ১৮ = 00010010। ২বার রাইট রোটেট → 00000100 = ৪।
জেনেরিক রোটেশন ফাংশন (রিয়ূজেবল)
#include <stdint.h>
uint32_t rotl32(uint32_t x, int n) {
n %= 32;
return (x << n) | (x >> (32 - n));
}
uint32_t rotr32(uint32_t x, int n) {
n %= 32;
return (x >> n) | (x << (32 - n));
}
ব্যবহার ক্ষেত্র
- ক্রিপ্টোগ্রাফি (AES, SHA এ রোটেশন ব্যবহার হয়)
- হ্যাশ ফাংশন
- বিট ম্যানিপুলেশন ট্রিকস
- সার্কুলার বাফার ইমপ্লিমেন্টেশন
নোট
- সাইনড ইন্টিজারে রাইট শিফট ইমপ্লিমেন্টেশন-ডিফাইনড (আরিথমেটিক vs লজিক্যাল)। আনসাইনড টাইপ (
uint32_t) ব্যবহার করুন। rotate %= sizeদিয়ে রোটেশন সংখ্যা বাউন্ড করতে হয়।