বিটওয়াইজ অপারেটরগুলি এমন অপারেটর যা বহু-বিট মানগুলিতে কাজ করে, তবে ধারণাগতভাবে একবারে এক বিট।
AND
যদি এর উভয় ইনপুট 1 হয় তবে অন্যথায় 0 হয়।
OR
এর এক বা উভয় ইনপুট 1 হলে 1 হয়, অন্যথায় 0 হয়।
XOR
এর ইনপুটগুলির মধ্যে একটি হ'ল 1 হ'ল অন্যথায় এটি 0 হয়।
NOT
এর ইনপুট 0 হলেই 1 হয়, অন্যথায় 0 হয়।
এগুলি প্রায়শই সত্য সারণী হিসাবে প্রদর্শিত হতে পারে। ইনপুট সম্ভাবনাগুলি শীর্ষে এবং বামে রয়েছে, ফলাফল বিট চারটিগুলির মধ্যে একটি (দুটিতে এর ক্ষেত্রে কেবল একটি ইনপুট থাকে না বলে) ইনপুটগুলির ছেদটিতে দেখানো মানগুলি।
AND | 0 1 OR | 0 1 XOR | 0 1 NOT | 0 1
----+----- ---+---- ----+---- ----+----
0 | 0 0 0 | 0 1 0 | 0 1 | 1 0
1 | 0 1 1 | 1 1 1 | 1 0
একটি উদাহরণ হ'ল যদি আপনি কেবল একটি পূর্ণসংখ্যার 4 টি বিট চান তবে আপনি এবং এটি 15 (বাইনারি 1111) সহ:
201: 1100 1001
AND 15: 0000 1111
------------------
IS 9 0000 1001
সেই ক্ষেত্রে 15-এ শূন্য বিটগুলি কার্যকরভাবে ফিল্টার হিসাবে কাজ করে, ফলাফলগুলিতে বিটগুলিও শূন্য হতে বাধ্য করে।
তদতিরিক্ত , >>
এবং <<
প্রায়শই বিটওয়াইস অপারেটর হিসাবে অন্তর্ভুক্ত থাকে এবং তারা যথাক্রমে ডান এবং একটি নির্দিষ্ট সংখ্যক বিট দ্বারা একটি বামকে "শিফট" করে, বিটগুলি ফেলে দেয় যে প্রান্তটি আপনি সরে যাচ্ছেন সেই রোলগুলি ফেলে দেয় এবং শূন্য বিটগুলিতে খাওয়ায় অন্য প্রান্ত.
সুতরাং, উদাহরণস্বরূপ:
1001 0101 >> 2 gives 0010 0101
1111 1111 << 4 gives 1111 0000
দ্রষ্টব্য যে পাইথনের বাম শিফটটি অস্বাভাবিক, কারণ এটি কোনও নির্দিষ্ট প্রস্থ ব্যবহার করে না যেখানে বিটগুলি ফেলে দেওয়া হয় - যখন অনেকগুলি ভাষা ডেটা টাইপের ভিত্তিতে একটি নির্দিষ্ট প্রস্থ ব্যবহার করে, পাইথন কেবলমাত্র অতিরিক্ত বিটগুলি সরবরাহ করতে প্রস্থটি প্রসারিত করে। পাইথনে বিযুক্তির আচরণ পেতে, আপনি and
কিছুটা বাম দিক দিয়ে বাম শিফটটি অনুসরণ করতে পারেন যেমন একটি 8-বিট মান বাম চারটি বিট স্থানান্তর করতে:
bits8 = (bits8 << 4) & 255
যে মাথায় রেখে, bitwise অপারেটরদের এর অন্য একটি উদাহরণ যদি আপনি দুই 4-বিট মান যে আপনি একটি 8-বিট এক প্যাক করতে চান, আপনি আপনার অপারেটরের সব তিনটি ব্যবহার করতে পারেন (হয় left-shift
, and
এবং or
):
packed_val = ((val1 & 15) << 4) | (val2 & 15)
& 15
অপারেশন নিশ্চিত করুন যে যদি দুটি মানই কেবলমাত্র ছোট হাতের 4 টি বিট আছে করতে হবে।
<< 4
একটি 4-বিট স্থানান্তর স্থানান্তর করতে বাম val1
শীর্ষ মধ্যে একটি 8-বিট মান 4 বিট।
|
কেবল এই দুটি একসঙ্গে সম্মিলন।
যদি val1
7 হয় এবং val2
4 হয়:
val1 val2
==== ====
& 15 (and) xxxx-0111 xxxx-0100 & 15
<< 4 (left) 0111-0000 |
| |
+-------+-------+
|
| (or) 0111-0100