آموزش پایتون - عملگرهای بیتی

عملگرهای بیتی پایتون

عملگرهای بیتی پایتون معمولاً برای انجام عملیات بیتی روی اشیای دارای نوع عدد صحیح استفاده می‌شوند. بااین‌حال، به‌جای اینکه شیء به‌صورت یک کل در نظر گرفته شود، آن را رشته‌ای از بیت‌ها در نظر می‌گیرند. عملیات مختلف روی هر بیت در این رشته انجام می‌شوند.

پایتون شش عملگر بیتی دارد: &، |، ^، ~، << و >>. همه این عملگرها (به‌جز ~) دودویی هستند؛ به این معنا که روی دو عملوند کار می‌کنند. هر عملوند یک رقم دودویی (بیت) با مقدار ۱ یا ۰ است.

عملگرهای بیتی در پایتون عبارت‌اند از:

  • عملگر AND بیتی
  • عملگر OR بیتی
  • عملگر XOR بیتی
  • عملگر NOT بیتی
  • عملگر انتقال بیتی به چپ
  • عملگر انتقال بیتی به راست

عملگر AND بیتی در پایتون (&)

عملگر AND بیتی تا حدودی شبیه عملگر and منطقی است. این عملگر تنها زمانی مقدار True را برمی‌گرداند که هر دو عملوند بیتی برابر با ۱ باشند (یعنی True). تمام حالت‌های ممکن عبارت‌اند از:

0 & 0 is 0
1 & 0 is 0
0 & 1 is 0
1 & 1 is 1

هنگامی که از اعداد صحیح به‌عنوان عملوند استفاده می‌کنید، هر دو عدد به معادل دودویی خود تبدیل می‌شوند. سپس عملیات & روی بیت‌های متناظر هر عدد، از کم‌ارزش‌ترین بیت به سمت پرارزش‌ترین بیت، انجام می‌شود.

مثالی از عملگر AND بیتی در پایتون

دو عدد صحیح 60 و 13 را در نظر بگیرید و آن‌ها را به‌ترتیب به متغیرهای a و b اختصاص دهید.

a=60
b=13
print ("a:",a, "b:",b, "a&b:",a&b)

خروجی زیر تولید می‌شود:

a: 60 b: 13 a&b: 12

برای درک نحوه انجام این عملیات توسط پایتون، معادل دودویی هر متغیر را به دست آورید.

print ("a:", bin(a))
print ("b:", bin(b))

خروجی زیر تولید می‌شود:

a: 0b111100
b: 0b1101

برای سهولت کار، از قالب استاندارد ۸ بیتی برای هر عدد استفاده کنید؛ بنابراین، «a» برابر با 00111100 و «b» برابر با 00001101 خواهد بود. بیایید عملیات AND را به‌صورت دستی روی بیت‌های متناظر این دو عدد انجام دهیم.

0011 1100
&
0000 1101
-------------
0000 1100

عدد دودویی حاصل را دوباره به عدد صحیح تبدیل کنید. به عدد 12 می‌رسید که همان نتیجه به‌دست‌آمده در مرحله قبل است.

>>> int('00001100',2)
12

عملگر OR بیتی در پایتون (|)

نماد «|» که به آن پایپ (pipe) گفته می‌شود، عملگر OR بیتی است. اگر هر یک از عملوندهای بیتی برابر با ۱ باشد، نتیجه ۱ خواهد بود؛ در غیر این صورت، نتیجه ۰ است.

0 | 0 is 0
0 | 1 is 1
1 | 0 is 1
1 | 1 is 1

مثالی از عملگر OR بیتی در پایتون

همان مقادیر a=60 و b=13 را در نظر بگیرید. نتیجه عملیات «|» برابر با 61 است. معادل‌های دودویی آن‌ها را به دست آورید.

a=60
b=13
print ("a:",a, "b:",b, "a|b:",a|b)
print ("a:", bin(a))
print ("b:", bin(b))

خروجی زیر تولید می‌شود:

a: 60 b: 13 a|b: 61
a: 0b111100
b: 0b1101

برای انجام دستی عملیات «|»، از قالب ۸ بیتی استفاده کنید.

0011 1100
    |
0000 1101
-------------
0011 1101

برای بررسی نتیجه، عدد دودویی را دوباره به عدد صحیح تبدیل کنید:

>>> int('00111101',2)
61

عملگر XOR بیتی در پایتون (^)

اصطلاح XOR مخفف عبارت «OR انحصاری» است. این اصطلاح به این معناست که نتیجه عملیات OR روی دو بیت، تنها زمانی برابر با ۱ خواهد بود که دقیقاً یکی از آن دو بیت برابر با ۱ باشد.

0 ^ 0 is 0
0 ^ 1 is 1
1 ^ 0 is 1
1 ^ 1 is 0

مثالی از عملگر XOR بیتی در پایتون

بیایید عملیات XOR را روی a=60 و b=13 انجام دهیم.

a=60
b=13
print ("a:",a, "b:",b, "a^b:",a^b)

خروجی زیر تولید می‌شود:

a: 60 b: 13 a^b: 49

اکنون عملیات XOR بیتی را به‌صورت دستی انجام می‌دهیم.

0011 1100
    ^
0000 1101
-------------
0011 0001

تابع int() نشان می‌دهد که مقدار دودویی 00110001 برابر با 49 است.

>>> int('00110001',2)
49

عملگر NOT بیتی در پایتون (~)

این عملگر معادل دودویی عملگر NOT منطقی است. این عملگر هر بیت را معکوس می‌کند؛ به‌طوری‌که ۱ با ۰ و ۰ با ۱ جایگزین می‌شود و مکمل عدد اصلی را برمی‌گرداند. پایتون از روش مکمل دو استفاده می‌کند. برای اعداد صحیح مثبت، این کار به‌سادگی با معکوس کردن بیت‌ها انجام می‌شود. برای یک عدد منفی مانند ‎-x، نمایش آن با استفاده از الگوی بیتی عدد (x-1) و معکوس کردن تمام بیت‌ها انجام می‌شود؛ یعنی تبدیل ۱ به ۰ و ۰ به ۱. بنابراین، در نمایش ۸ بیتی داریم:

-1 is complement(1 - 1) = complement(0) = "11111111"
-10 is complement(10 - 1) = complement(9) = complement("00001001") = "11110110".

مثالی از عملگر NOT بیتی در پایتون

برای a=60، مکمل آن برابر است با:

a=60
print ("a:",a, "~a:", ~a)

خروجی زیر تولید می‌شود:

a: 60 ~a: -61

عملگر انتقال بیتی به چپ در پایتون (<<)

عملگر انتقال به چپ، بیت‌ها را به تعداد مشخص‌شده در سمت راست نماد «<<» به سمت چپ جابه‌جا می‌کند. بنابراین، عبارت «x << 2» باعث می‌شود بیت‌های نمایش دودویی عدد x دو موقعیت به سمت چپ منتقل شوند.

مثالی از عملگر انتقال بیتی به چپ در پایتون

بیایید انتقال به چپ را روی عدد 60 انجام دهیم.

a=60
print ("a:",a, "a<<2:", a<<2)

خروجی زیر تولید می‌شود:

a: 60 a<<2: 240

این عملیات چگونه انجام می‌شود؟ بیایید از معادل دودویی عدد 60 استفاده کنیم و انتقال به چپ را به‌اندازه ۲ بیت انجام دهیم.

0011 1100
<<
    2
-------------
1111 0000

عدد دودویی را به عدد صحیح تبدیل کنید. نتیجه برابر با 240 است.

>>> int('11110000',2)
240

عملگر انتقال بیتی به راست در پایتون (>>)

عملگر انتقال به راست، بیت‌ها را به تعداد مشخص‌شده در سمت راست نماد «>>» به سمت راست جابه‌جا می‌کند. بنابراین، عبارت «x >> 2» باعث می‌شود بیت‌های نمایش دودویی عدد x دو موقعیت به سمت راست منتقل شوند.

مثالی از عملگر انتقال بیتی به راست در پایتون

بیایید انتقال به راست را روی عدد 60 انجام دهیم.

a=60
print ("a:",a, "a>>2:", a>>2)

خروجی زیر تولید می‌شود:

a: 60 a>>2: 15

عملیات انتقال دستی به راست برای عدد 60 در زیر نشان داده شده است:

   0011 1100
   >>
   2
   -------------
   0000 1111

از تابع int() برای تبدیل عدد دودویی بالا به عدد صحیح استفاده کنید. نتیجه برابر با 15 است.

>>> int('00001111',2)
15

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.