পাইথন বিটওয়াইজ অপারেটর (লজিক্যাল প্রোডাক্ট, লজিক্যাল বা, এক্সক্লুসিভ বা, ইনভার্সন, শিফট)

ব্যবসায়

পাইথন নিম্নলিখিত বিটওয়াইজ অপারেটরগুলি প্রদান করে, যা যথাক্রমে একটি বাইনারি পূর্ণসংখ্যা টাইপের int মানের প্রতিটি বিটে লজিক্যাল কনজাঙ্কশন, লজিক্যাল ডিসজাঙ্কশন, এক্সক্লুসিভ ডিসজাঙ্কশন, বিটওয়াইজ ইনভার্সন, লেফট বিট শিফট এবং ডান বিট শিফট করে।

  • &
  • |
  • ^
  • ~
  • <<
  • >>

এই বিভাগে, আমরা প্রথমে নিম্নলিখিত ব্যাখ্যা করি।

  • ছেদ(AND) :&
  • বিচ্ছিন্নতা(OR) :|
  • এক্সক্লুসিভ-বা অপারেশন(XOR) :^

পরবর্তী, আমরা নিম্নলিখিত আলোচনা করব।

  • ঋণাত্মক পূর্ণসংখ্যার উপর বিটওয়াইজ অপারেশন
  • বিট উল্টানো( NOT) :~
  • বিট শিফট:<<,>>

বাইনারি, অক্টাল এবং হেক্সাডেসিমেলে পূর্ণসংখ্যা কীভাবে লিখতে হয় এবং নিম্নলিখিত ফাংশনগুলি ব্যবহার করে বাইনারি, অক্টাল এবং হেক্সাডেসিমেল সংখ্যা এবং স্ট্রিংগুলি কীভাবে রূপান্তর করা যায় সে সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত নিবন্ধটি দেখুন।

  • bin()
  • oct()
  • hex()
  • format()

এছাড়াও, বিটওয়াইজ অপারেশনের পরিবর্তে বুলিয়ান মানের (সত্য, মিথ্যা) উপর লজিক্যাল অপারেশনের (বুলিয়ান অপারেশন) জন্য, নিম্নলিখিত নিবন্ধটি পড়ুন। &,| এর পরিবর্তে এবং,বা ব্যবহার করুন।

ছেদ(AND) :&অপারেটর

এটি একটি যৌক্তিক একটি উদাহরণ এবং & অপারেটর, ফলাফলটি bin() দ্বারা বাইনারি স্বরলিপিতে একটি স্ট্রিংয়ে রূপান্তরিত হয়।

x = 9   # 0b1001
y = 10  # 0b1010

print(x & y)
print(bin(x & y))
# 8
# 0b1000

বিচ্ছিন্নতা(OR) :|অপারেটর

| ব্যবহার করে একটি যৌক্তিক পণ্যের (OR) উদাহরণ অপারেটর, ফলাফলটি bin() এবং আউটপুট দ্বারা বাইনারি স্বরলিপিতে একটি স্ট্রিং-এ রূপান্তরিত হয়।

print(x | y)
print(bin(x | y))
# 11
# 0b1011

এক্সক্লুসিভ-বা অপারেশন(XOR) :^অপারেটর

^ অপারেটর ব্যবহার করে একটি লজিক্যাল পণ্যের (XOR) উদাহরণ, bin() ব্যবহার করে বাইনারি নোটেশনে একটি স্ট্রিং-এ রূপান্তরের ফলাফলের সাথে মিলিত।

print(x ^ y)
print(bin(x ^ y))
# 3
# 0b11

লজিক্যাল AND, OR, এবং XOR-এর প্রতিটি বিটের জন্য ইনপুট এবং আউটপুটের মধ্যে সম্পর্ক নীচের টেবিলে দেখানো হয়েছে।

ইনপুট 1ইনপুট 2ছেদ(AND)বিচ্ছিন্নতা(OR)এক্সক্লুসিভ-বা অপারেশন(XOR)
11110
10011
01011
00000

ঋণাত্মক পূর্ণসংখ্যার উপর বিটওয়াইজ অপারেশন

যখন একটি বিটওয়াইজ অপারেশন একটি ঋণাত্মক পূর্ণসংখ্যার উপর সঞ্চালিত হয়, তখন মানটি এমনভাবে প্রক্রিয়া করা হয় যেন এটি দুটির পরিপূরক আকারে প্রকাশ করা হয়েছে।

দ্রষ্টব্য, যাইহোক, আপনি যদি bin() বা ফরম্যাট() ব্যবহার করে একটি ঋণাত্মক পূর্ণসংখ্যাকে একটি বাইনারি স্ট্রিং-এ রূপান্তর করেন, তাহলে পরম মানের দুটি পরিপূরক বিন্যাসের পরিবর্তে একটি বিয়োগ চিহ্ন থাকবে।

আপনি যদি দুটির পরিপূরক উপস্থাপনা সহ একটি স্ট্রিং পেতে চান, তাহলে নীচের হিসাবে দেখানো সর্বাধিক সংখ্যক বিট সংখ্যার সাথে AND নিন।

  • 4-বিটের জন্য0b1111(=0xf)
  • 8-বিটের জন্য0xff
  • 16-বিটের জন্য0xffff

আপনি দুটির পরিপূরক উপস্থাপনার একটি স্ট্রিং পেতে পারেন (প্রতিটি বিট উল্টানো এবং 1 যোগ করা হয়েছে)।

x = -9

print(x)
print(bin(x))
# -9
# -0b1001

print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7

বিট উল্টানো:~অপারেটর

~ অপারেটরদের সাথে বিট ফ্লিপিংয়ের উদাহরণ।

বিটওয়াইজ ইনভার্সন শুধু প্রতিটি বিট ইনভার্টেডের মান নয়। এই অপারেটর ব্যবহার করার সময় রিটার্ন মান নিম্নরূপ।
~x#ERROR!-(x+1)

-(x+1)এই মানটি ইনপুট মান x কে দুটির পরিপূরক ফর্ম হিসাবে বিবেচনা করা এবং সমস্ত বিটকে উল্টে দেওয়ার সমতুল্য।

উপরে উল্লিখিত হিসাবে, পাইথনে, যখন একটি ঋণাত্মক পূর্ণসংখ্যা bin(), ফরম্যাট(), ইত্যাদি ব্যবহার করে একটি বাইনারি স্ট্রিংয়ে রূপান্তরিত হয়, তখন এটি দুটির পরিপূরক আকারে নয়, একটি বিয়োগ চিহ্ন সহ পরম মান। তাই, ~x কে সরাসরি একটি স্ট্রিং-এ রূপান্তর করার ফলে মূল মানের বিটগুলি উল্টানো একটি স্ট্রিং হবে না।

x = 9  # 0b1001

print(~x)
print(bin(~x))
# -10
# -0b1010

যখন আমরা AND অপারেশন করি এবং এটিকে দুইটির পরিপূরক উপস্থাপনার একটি স্ট্রিংয়ে পরিণত করি, তখন আমরা দেখতে পাব যে মূল মানের বিটগুলি উল্টানো হয়েছে।

উপরন্তু, উদাহরণস্বরূপ, একটি বিট স্ট্রিং পেতে যা একটি 4-সংখ্যার বিট স্ট্রিং উল্টানো (চিহ্ন বিট বাদ দেওয়া হয়েছে), নিম্নরূপ ANDed মানের জন্য শূন্য পূরণ করতে format() ব্যবহার করুন04b'

print(bin(~x & 0xff))
print(format(~x & 0b1111, '04b'))
# 0b11110110
# 0110

বিট শিফট:<<,>>

বিট শিফট অপারেটর ব্যবহার করে বাম বিট শিফট এবং ডান বিট শিফটের উদাহরণ।

x = 9  # 0b1001

print(x << 1)
print(bin(x << 1))
# 18
# 0b10010

print(x >> 1)
print(bin(x >> 1))
# 4
# 0b100

নেতিবাচক মানগুলির জন্য, সাইন বিটটি প্রসারিত এবং স্থানান্তরিত হয় এবং ধনাত্মক/নেতিবাচক চিহ্নটি একই থাকে। একটি ঋণাত্মক মান হল বাম দিকে 1 সেকেন্ডের একটি লাইনের একটি চিত্র।

x = -9
print(bin(x))
print(bin(x & 0xff))
# -0b1001
# 0b11110111

print(x << 1)
print(bin(x << 1))
print(bin((x << 1) & 0xff))
# -18
# -0b10010
# 0b11101110

print(x >> 1)
print(bin(x >> 1))
print(bin((x >> 1) & 0xff))
# -5
# -0b101
# 0b11111011

দুটির পরিপূরক অভিব্যক্তির স্ট্রিংগুলির পরিপ্রেক্ষিতে চিন্তা করা ভাল, যেহেতু সংখ্যার পরিপ্রেক্ষিতে চিন্তা করা পরিষ্কার নয়।

Copied title and URL