PHP Operators
PHP Operators পর্ব -৫ : PHP Bitwise Operators
এই পর্বে আপনি জানতে পারবেন :
- PHP তে Bitwise Operators কি?
- PHP তে Bitwise Operators কয়টি? এবং কি কি ?
- PHP তে Bitwise And (&) Operator কিভাবে কাজ করে?
- PHP তে Bitwise Or (|) Operator কিভাবে কাজ করে?
- PHP তে Bitwise Xor (^) Operator কিভাবে কাজ করে?
- PHP তে Bitwise Not (~) Operator কিভাবে কাজ করে?
- PHP তে Bitwise Left Shift(<<) Operator কি? এবং কিভাবে কাজ করে?
- PHP তে Bitwise Right (>>) Shift Operator কি? এবং কিভাবে কাজ করে?
PHP তে Bitwise Operators কি?
PHP অথবা যেকোনো Programming Language এ যেইসব symbol বা চিহ্ন কম্পিউটারের binary পর্যায়ে এক বা একাধিক Integer Number এর মধ্যে নির্দিষ্ট বিট মূল্যায়ন,ম্যানিপুলেশন এবং decision বা সিদ্ধান্ত মূলক কাজ করার জন্য ব্যবহার করা হয়, PHP অথবা যেকোনো Programming Language এর পরিভাষায় এ গুলোকে বলা হয় Bitwise Operators. Bitwise Operator কি তা ভালোভাবে বোঝার জন্য আপনাকে Binary Number কি সেটি বুঝে আসতে হবে। Binary Number সহ অন্যান্য number system ভালো ভাবে বুঝার জন্য নিচের article টি দেখুন।।
PHP তে Bitwise Operators কয়টি? এবং কি কি ?
PHP তে Bitwise Operator ৬ টি। নিচের টেবিল এ প্রত্যেকটি Bitwise Operators সম্পর্কে সংক্ষেপে আলোচনা করা হলো:
Bitwise Operators | Operator নাম | উদাহরণ | ফলাফল (Result) |
---|---|---|---|
& | And | echo $a & $b; | সেই Binary Bit গুলিই আসবে যেগুলো $a এবং $b variable দুটোতেই Binary Value Set বা 1 |
| | Or | $a | $b | সেই Binary Bit গুলিই আসবে যেগুলো $a এবং $b variable দুটোর মধ্যে যেকোনো একটি Set বা 1 |
^ | Xor | $a ^ $b | সেই Binary Bit গুলিই আসবে যেগুলো $a এবং $b variable দুটোর মধ্যে যেকোনো একটি Set বা 1 কিন্তু দুটিই SET হওয়া যাবেনা। |
~ | Not | ~$a | যা আছে তার বিপরীত আসবে। অর্থাৎ : যদি $a এর Binary Bit 0 থাকে , তাহলে Output আসবে 1 . একই ভাবে $a এর Binary Bit 1 থাকে, Output আসবে 0. |
<< | Left Shift | $a<<$b | $a এর Binary Bit গুলো $b এর সমসংখ্যক Bit বামে shift হবে। |
>> | Right Shift | $a>>$b | $a এর Binary Bit গুলো $b এর সমসংখ্যক Bit ডানে shift হবে। |
https://blog.w3programmers.com/php-course/
PHP তে Bitwise And (&) Operator কিভাবে কাজ করে?
Bitwise And Operator এ সেই Binary Bit গুলিই আসবে যেগুলো $x এবং $y variable দুটোতেই Binary Value Set বা 1
নীচের table দুটি থেকে আমরা বুঝতে পারবো Bitwise AND (&) কীভাবে কাজ করে।
Table 1:
Expression1 | Expression2 | Result |
---|---|---|
False | False | False |
False | True | False |
True | False | False |
True | True | True |
Table 2:
Bit in Expression1 | Bit in Expression2 | Result |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Bitwise And (&) কিভাবে কাজ করে তা বুঝার জন্য নিচের উদাহরণ দেখে নেয়া যাক :
<?php $x=7; $y=5; echo $x & $y; //Result: 5 ?>
এই উদাহরণ আরেকটু ভালো ভাবে বুঝার জন্য নিচের টেবিল দেখুন :
1 Byte ( 8 bits ) | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Place Value | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
$x | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | = | 7 |
$y | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | = | 5 |
Result: | 1 | 0 | 1 | = | 5 |
ব্যাখ্যা: উপরের টেবিল এ আমরা দেখতে পাই, $x এবং $y variable এর প্রথম এবং চতুর্থ Bit দুইটারই Set সংজ্ঞা অনুযায়ী যার AND করলে হয় 101. আর 101 এর ডেসিমাল ভ্যালু হচ্ছে 1*22+0*21+1*20=4+0+1=5
PHP তে Bitwise Or (|) Operator কিভাবে কাজ করে?
Bitwise Or Operator এ সেই Binary Bit গুলিই আসবে যেগুলো $x এবং $y variable দুটোর মধ্যে যেকোনো একটি Set বা 1
নীচের table দুটি থেকে আমরা বুঝতে পারবো Bitwise OR (|) কীভাবে কাজ করে।
Table 1:
Expression1 | Expression2 | Result |
---|---|---|
False | False | False |
False | True | True |
True | False | True |
True | True | True |
Table 2:
Bit in Expression1 | Bit in Expression2 | Result |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Bitwise OR (|) কিভাবে কাজ করে তা বুঝার জন্য নিচের উদাহরণ দেখে নেয়া যাক :
<?php $x=7; $y=5; echo $x | $y; //Result: 7 ?>
এই উদাহরণ আরেকটু ভালো ভাবে বুঝার জন্য নিচের টেবিল দেখুন :
1 Byte ( 8 bits ) | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Place Value | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
$x | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | = | 7 |
$y | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | = | 5 |
Result: | 1 | 1 | 1 | = | 7 |
ব্যাখ্যা: উপরের টেবিল এ আমরা দেখতে পাই, $x variable এর প্রথম ,দ্বিতীয় এবং চতুর্থ Bit তিনটিই Set সংজ্ঞা অনুযায়ী যার OR করলে হয় 111. আর 111 এর ডেসিমাল ভ্যালু হচ্ছে 1*22+1*21+1*20=4+2+1=5
https://blog.w3programmers.com/php-course/
PHP তে Bitwise Xor (^) Operator কিভাবে কাজ করে?
Bitwise Xor Operator এ সেই Binary Bit গুলিই আসবে যেগুলো $a এবং $b variable দুটোর মধ্যে যেকোনো একটি Set বা 1 কিন্তু দুটিই SET বা UNSET হওয়া যাবেনা। নীচের table দুটি থেকে আমরা বুঝতে পারবো Bitwise XOR কীভাবে কাজ করে।
Table 1:
Expression1 | Expression2 | Result |
---|---|---|
False | False | False |
False | True | True |
True | False | True |
True | True | False |
Table 2:
Bit in Expression1 | Bit in Expression2 | Result |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Bitwise Or (^) কিভাবে কাজ করে তা বুঝার জন্য নিচের উদাহরণ দেখে নেয়া যাক :
<?php $x=7; $y=5; echo $x ^ $y; //Result: 2 ?>
আরেকটু ভালো ভাবে বুঝার জন্য নিচের টেবিল দেখুন :
1 Byte ( 8 bits ) | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Place Value | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
$x | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | = | 7 |
$y | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | = | 5 |
Result: | 0 | 1 | 0 | = | 2 |
ব্যাখ্যা: উপরের টেবিল এ আমরা দেখতে পাই, $x এবং $y variable এর প্রথম এবং চতুর্থ Bit দুইটারই Set একমাত্র দ্বিতীয় Bit ই একটি আরেকটির বিপরীত সংজ্ঞা অনুযায়ী যার Xor করলে হয় 010. আর 010 এর ডেসিমাল ভ্যালু হচ্ছে 0*22+1*21+0*20=0+1+0=2
https://blog.w3programmers.com/php-course/
PHP তে Bitwise Not (~) Operator কিভাবে কাজ করে?
Bitwise Not মানে যা আছে তার বিপরীত আসবে। অর্থাৎ : যদি $a এর Binary Bit 0 থাকে , তাহলে Output আসবে 1 . একই ভাবে $a এর Binary Bit 1 থাকে, Output আসবে 0.
Bitwise OR (|) এবং Bitwise AND (&)এর বাস্তব প্রয়োগ #১:
আসুন একটি ওয়েব অ্যাপ্লিকেশনে user permissions সম্পর্কিত একটি real-world example বিবেচনা করি।
কল্পনা করুন আপনার এমন একটি সিস্টেম আছে যেখানে প্রতিটি ইউজারের আপনার অ্যাপ্লিকেশনের বিভিন্ন অংশ অ্যাক্সেস করার জন্য নির্দিষ্ট পারমিশন রয়েছে। আপনি bitwise operations ব্যবহার করে এই পারমিশন গুলি দক্ষতার সাথে সংরক্ষণ করতে চান। এখানে একটি সরলীকৃত উদাহরণ:
<?php // Define permission constants define('READ', 1); // 0001 define('WRITE', 2); // 0010 define('DELETE', 4); // 0100 define('ADMIN', 8); // 1000 // User permissions $user1Permissions = READ | WRITE; // 0001 | 0010 = 0011 $user2Permissions = READ | DELETE; // 0001 | 0100 = 0101 $user3Permissions = ADMIN; // 1000 // Check if a user has a specific permission function hasPermission($userPermissions, $permissionToCheck) { return ($userPermissions & $permissionToCheck) === $permissionToCheck; } // Example usage if (hasPermission($user1Permissions, WRITE)) { echo "User 1 has write permission."; } else { echo "User 1 does not have write permission."; } if (hasPermission($user2Permissions, DELETE)) { echo "User 2 has delete permission."; } else { echo "User 2 does not have delete permission."; } if (hasPermission($user3Permissions, WRITE)) { echo "User 3 has write permission."; } else { echo "User 3 does not have write permission."; } ?>
Output
User 1 has write permission. User 2 has delete permission. User 3 does not have write permission.
Bitwise XOR এর বাস্তব প্রয়োগ #১:
একটি simple message কে এনক্রিপ্ট এবং ডিক্রিপ্ট করার জন্য পিএইচপি-তে XOR (^) অপারেটর ব্যবহার করার একটি real-world example বিবেচনা করা যাক। একটি কী সহ একটি message XOR করা এনক্রিপশনের একটি মৌলিক রূপ।
<?php function simpleXOREncryption($message, $key) { $messageLength = strlen($message); $keyLength = strlen($key); // Repeat the key to match the length of the message $extendedKey = str_repeat($key, ceil($messageLength / $keyLength)); $encryptedMessage = ''; // XOR each character of the message with the corresponding character in the key for ($i = 0; $i < $messageLength; $i++) { $encryptedMessage .= $message[$i] ^ $extendedKey[$i]; } return $encryptedMessage; } function simpleXORDecryption($encryptedMessage, $key) { return simpleXOREncryption($encryptedMessage, $key); // XORing twice gives back the original message } // Example usage $message = "Hello, World!"; $key = "secretkey"; // Encrypt the message $encryptedMessage = simpleXOREncryption($message, $key); echo "Encrypted Message: $encryptedMessage\n"; // Decrypt the message $decryptedMessage = simpleXORDecryption($encryptedMessage, $key); echo "Decrypted Message: $decryptedMessage\n"; ?>
Bitwise Not (~) কিভাবে কাজ করে তা বুঝার জন্য নিচের উদাহরণ দেখে নেয়া যাক :
<?php $x=7; $y=3; echo $x & ~$y; //Result=4 ?>
উদাহরণটি আরেকটু ভালো ভাবে বুঝার জন্য নিচের টেবিল দেখুন :
1 Byte ( 8 bits ) | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Place Value | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
$x | 1 | 1 | 1 | = | 7 | |||||
$y | 0 | 1 | 1 | = | 3 | |||||
~$y | 1 | 0 | 0 | = | 4 | |||||
Result: | 1 | 0 | 0 | = | 4 |
Bitwise NOT (~)এর বাস্তব প্রয়োগ #১:
<?php // Define permission constants define('READ', 1); // 0001 define('WRITE', 2); // 0010 define('DELETE', 4); // 0100 define('ADMIN', 8); // 1000 // Define user roles $userRoles = READ | WRITE | ADMIN; // User has READ, WRITE, and ADMIN roles (0001 | 0010 | 1000 = 1011) // Display current user roles and permissions echo "User Roles: $userRoles\n"; echo "User Permissions: " . ($userRoles & (READ | WRITE | DELETE | ADMIN)) . "\n"; // Revoke DELETE permission using bitwise NOT (~) $revokedPermission = DELETE; $userRoles &= ~$revokedPermission; // Display updated user roles and permissions echo "Revoked Permission: $revokedPermission\n"; echo "Updated User Roles: $userRoles\n"; echo "Updated User Permissions: " . ($userRoles & (READ | WRITE | DELETE | ADMIN)) . "\n"; ?>
উপরোক্ত উদাহরণে আমরা bitwise NOT (~) operator ব্যবহার করি এর বিট প্যাটার্ন উল্টে ডিলিট অনুমতি প্রত্যাহার করি ।
PHP তে Bitwise Left Shift(<<) Operator কি? এবং কিভাবে কাজ করে?
যখন Binary Bit গুলো নির্দিষ্ট সংখ্যক ধাপ বামে স্থানান্তর হয়, PHP এর পরিভাষায় একে বলা হয় Left Shift. Left Shift বের করার সহজ পদ্ধতি হচ্ছে , যেই সংখ্যার সাথে যত ধাপ left shift করবেন ততগুলো ২ একটি আরেকটির সাথে গুন করতে হবে। এবং ঐ গুণফলের সাথে মূল সংখ্যার (অর্থাৎ যাকে Left Shift করবেন তাকে) গুন করতে হবে। আরেকটু সহজ ভাবে বুঝার জন্য নিচের উদাহরণটি টি দেখুন :
<?php echo 8<<2; //Result:32 echo "<br>"; echo 8<<4 //Result: 128 ?>
এখানে 8<<2 মানে বুঝায় 8*22 = 8*2*2=32 একই ভাবে 8<<4 মানে বুঝায় 8*24 = 8*2*2*2*2=128
PHP তে Right Shift(>>) Operator কি? এবং কিভাবে কাজ করে?
যখন Binary Bit গুলো নির্দিষ্ট সংখ্যক ধাপ ডানে স্থানান্তর হয়, PHP এর পরিভাষায় একে বলা হয় Right Shift. Right Shift বের করার সহজ পদ্ধতি হচ্ছে , যেই সংখ্যার সাথে যত ধাপ Right shift করবেন ততগুলো ২ একটি আরেকটির সাথে গুন করতে হবে। এবং ঐ গুণফলের সাথে মূল সংখ্যার (অর্থাৎ যাকে Right Shift করবেন তাকে) ভাগ করতে হবে। আরেকটু সহজ ভাবে বুঝার জন্য নিচের উদাহরণটি টি দেখুন :
<?php echo 8 & 2; //Result:2 echo "<br>"; echo 16 & 4 //Result:1 ?>
এখানে 8>>2 মানে বুঝায় 8/22 = 8/2*2=2 একই ভাবে 16>>4 মানে বুঝায় 16/24 = 16/2*2*2*2=1
Bitwise Left Shift(<<) এবং Bitwise Right Shift(>>) এর বাস্তব প্রয়োগ #১:
bitwise left shift (<<) এবং bitwise right shift (>>) ব্যবহার করে একটি বাস্তব উদাহরণ দেখা যাক। এই উদাহরণে, আমরা একটি simple user permissions system তৈরি করব যেখানে permissions গুলি একটি single integer এ সংরক্ষণ করা হয় এবং এই permissions গুলিকে ম্যানিপুলেট করতে bitwise shifts ব্যবহার করা হয়।
<?php // Define permission constants define('READ', 1); // 0001 define('WRITE', 2); // 0010 define('DELETE', 4); // 0100 define('ADMIN', 8); // 1000 // Initial user permissions $userPermissions = READ; // User has READ permission (0001) // Display initial user permissions echo "Initial User Permissions: $userPermissions\n"; // Use bitwise left shift to add WRITE permission $userPermissions = $userPermissions | (WRITE << 1); // 0001 | (0010 << 1) = 0001 | 0100 = 0101 // Display updated user permissions echo "User Permissions After Adding WRITE: $userPermissions\n"; // Simulate permissions expiration using bitwise right shift $expirationTime = 2; // Assume permissions expire after 2 time units $userPermissions = $userPermissions >> $expirationTime; // Shift the bits to the right, simulating permission expiration // Display final user permissions after expiration echo "Final User Permissions After Expiration: $userPermissions\n"; ?>