Python بٹ وائز آپریٹرز (منطقی پروڈکٹ، منطقی یا، خصوصی یا، الٹا، شفٹ)

کاروبار

Python درج ذیل بٹ وائز آپریٹرز فراہم کرتا ہے، جو بالترتیب بائنری انٹیجر ٹائپ int ویلیو کے ہر بٹ پر منطقی کنکشن، منطقی اختلاف، خصوصی اختلاط، بٹ وائز الٹا، بائیں بٹ شفٹ اور دائیں بٹ شفٹ کو انجام دیتا ہے۔

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

اس سیکشن میں، ہم پہلے درج ذیل کی وضاحت کرتے ہیں۔

  • چوراہا(AND) :&
  • علیحدگی(OR) :|
  • EXCLUSIVE-یا آپریشن(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

EXCLUSIVE-یا آپریشن(XOR) :^آپریٹر

^ آپریٹر کا استعمال کرتے ہوئے منطقی پروڈکٹ (XOR) کی مثال، bin() کا استعمال کرتے ہوئے بائنری اشارے میں سٹرنگ میں تبدیلی کے نتیجے کے ساتھ مل کر۔

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

ہر ایک منطقی AND، OR، اور XOR کے لیے ان پٹ اور آؤٹ پٹ کے درمیان تعلق نیچے دیے گئے جدول میں دکھایا گیا ہے۔

ان پٹ 1ان پٹ 2چوراہا(AND)علیحدگی(OR)EXCLUSIVE-یا آپریشن(XOR)
11110
10011
01011
00000

منفی عدد پر بٹ وائز آپریشنز

جب منفی عدد پر بٹ وائز آپریشن کیا جاتا ہے، تو قدر پر اس طرح عمل کیا جاتا ہے جیسے اسے دو کی تکمیلی شکل میں ظاہر کیا گیا ہو۔

تاہم، نوٹ کریں کہ اگر آپ bin() یا format() کا استعمال کرتے ہوئے منفی عدد کو بائنری سٹرنگ میں تبدیل کرتے ہیں، تو مطلق قدر میں دو کے تکمیلی فارمیٹ کے بجائے مائنس کا نشان ہوگا۔

اگر آپ دو کی تکمیلی نمائندگی کے ساتھ سٹرنگ حاصل کرنا چاہتے ہیں، تو 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

تھوڑا سا پلٹائیں:~آپریٹر

~ آپریٹرز کے ساتھ بٹ پلٹنے کی مثال۔

Bitwise inversion صرف ہر بٹ الٹی کی قدر نہیں ہے۔ اس آپریٹر کو استعمال کرتے وقت واپسی کی قیمت درج ذیل ہے۔
~x#ERROR!-(x+1)

-(x+1)یہ قدر ان پٹ ویلیو x کو دو کی تکمیلی شکل کے طور پر غور کرنے اور تمام بٹس کو الٹ دینے کے مترادف ہے۔

جیسا کہ اوپر بتایا گیا ہے، Python میں، جب ایک منفی عدد کو bin(), format() وغیرہ کا استعمال کرتے ہوئے بائنری سٹرنگ میں تبدیل کیا جاتا ہے، تو یہ دو کی تکمیلی شکل میں نہیں ہوتا ہے، بلکہ مائنس کے نشان کے ساتھ مطلق قدر میں ہوتا ہے۔ لہذا، ~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

منفی قدروں کے لیے، سائن بٹ کو بڑھایا اور شفٹ کیا جاتا ہے، اور مثبت/منفی نشان وہی رہتا ہے۔ منفی قدر بائیں طرف 1s کی لائن کی تصویر ہے۔

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