Python ផ្តល់នូវប្រតិបត្តិករ bitwise ខាងក្រោម ដែលអនុវត្តការភ្ជាប់ឡូជីខល ការបំបែកតក្កវិជ្ជា ការផ្តាច់ផ្តាច់មុខ ការបញ្ច្រាស់ប៊ីត ការផ្លាស់ប្តូរប៊ីតឆ្វេង និងការផ្លាស់ប្តូរប៊ីតស្តាំលើប៊ីតនីមួយៗនៃប្រភេទចំនួនគត់គោលពីរប្រភេទ int តម្លៃរៀងៗខ្លួន។
&
|
^
~
<<
>>
ក្នុងផ្នែកនេះ យើងពន្យល់ជាបឋមដូចតទៅ។
- ប្រសព្វ(AND) :
&
- ការបំបែក(OR) :
|
- ប្រតិបត្តិការ EXCLUSIVE-OR(XOR) :
^
បន្ទាប់មកយើងនឹងពិភាក្សាដូចខាងក្រោម។
- ប្រតិបត្តិការ Bitwise លើចំនួនគត់អវិជ្ជមាន
- ត្រឡប់បន្តិច( NOT) :
~
- ការផ្លាស់ប្តូរបន្តិច:
<<
,>>
សម្រាប់ព័ត៌មានបន្ថែមអំពីរបៀបសរសេរចំនួនគត់ក្នុងគោលពីរ គោលដប់ប្រាំបី និងគោលដប់ប្រាំមួយ និងរបៀបបំប្លែងលេខគោលពីរ គោលដប់ប្រាំបី និងលេខគោលដប់ប្រាំមួយ ដោយប្រើមុខងារខាងក្រោម សូមមើលអត្ថបទខាងក្រោម។
bin()
oct()
hex()
format()
- អត្ថបទដែលទាក់ទង:បំប្លែងលេខគោលពីរ គោលប្រាំបី និងលេខគោលដប់ប្រាំមួយ និងខ្សែអក្សរទៅ និងពីគ្នាទៅវិញទៅមកនៅក្នុង Python
ដូចគ្នានេះផងដែរ សម្រាប់ប្រតិបត្តិការឡូជីខល (ប្រតិបត្តិការប៊ូលីន) លើតម្លៃប៊ូលីន (ពិត មិនពិត) ជំនួសឱ្យប្រតិបត្តិការប៊ីត សូមមើលអត្ថបទខាងក្រោម។ ប្រើ និង ឬជំនួស &,|។
- អត្ថបទដែលទាក់ទង:ប្រតិបត្តិករឡូជីខលរបស់ Python និង ឬ និងមិនមែន (ការភ្ជាប់ឡូជីខល ការបំបែក ការបដិសេធ)
ប្រសព្វ(AND) :&ប្រតិបត្តិករ
នេះជាឧទាហរណ៍នៃឡូជីខល AND ដោយប្រើ & operator ជាមួយនឹងលទ្ធផលបានបំប្លែងទៅជាខ្សែអក្សរក្នុងសញ្ញាគោលពីរដោយ bin()។
x = 9 # 0b1001 y = 10 # 0b1010 print(x & y) print(bin(x & y)) # 8 # 0b1000
ការបំបែក(OR) :|ប្រតិបត្តិករ
ឧទាហរណ៍នៃផលិតផលឡូជីខល (OR) ដោយប្រើ | operator ជាមួយនឹងលទ្ធផលបានបំប្លែងទៅជា string ក្នុង binary notation ដោយ bin() និង output ជាមួយគ្នា។
print(x | y) print(bin(x | y)) # 11 # 0b1011
ប្រតិបត្តិការ EXCLUSIVE-OR(XOR) :^ប្រតិបត្តិករ
ឧទាហរណ៍នៃផលិតផលឡូជីខល (XOR) ដោយប្រើប្រតិបត្តិករ ^ រួមជាមួយនឹងលទ្ធផលនៃការបម្លែងទៅជាខ្សែអក្សរនៅក្នុងសញ្ញាគោលពីរដោយប្រើ bin() ។
print(x ^ y) print(bin(x ^ y)) # 3 # 0b11
ទំនាក់ទំនងរវាងការបញ្ចូល និងទិន្នផលសម្រាប់ប៊ីតនីមួយៗនៃឡូជីខល AND, OR, និង XOR ត្រូវបានបង្ហាញក្នុងតារាងខាងក្រោម។
បញ្ចូល 1 | បញ្ចូល 2 | ប្រសព្វ(AND) | ការបំបែក(OR) | ប្រតិបត្តិការ EXCLUSIVE-OR(XOR) |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
ប្រតិបត្តិការ Bitwise លើចំនួនគត់អវិជ្ជមាន
នៅពេលដែលប្រតិបត្តិការប៊ីតត្រូវបានអនុវត្តលើចំនួនគត់អវិជ្ជមាន តម្លៃត្រូវបានដំណើរការដូចជាប្រសិនបើវាត្រូវបានបង្ហាញក្នុងទម្រង់បំពេញបន្ថែមរបស់ពីរ។
ទោះជាយ៉ាងណាក៏ដោយ សូមចំណាំថា ប្រសិនបើអ្នកបំប្លែងចំនួនគត់អវិជ្ជមានទៅជាខ្សែអក្សរគោលពីរដោយប្រើ 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
- អត្ថបទដែលទាក់ទង:បំប្លែងលេខគោលពីរ គោលប្រាំបី និងលេខគោលដប់ប្រាំមួយ និងខ្សែអក្សរទៅ និងពីគ្នាទៅវិញទៅមកនៅក្នុង Python
ត្រឡប់បន្តិច:~ប្រតិបត្តិករ
~ ឧទាហរណ៍នៃការត្រឡប់បន្តិចជាមួយប្រតិបត្តិករ។
ការបញ្ច្រាសប៊ីតមិនមែនជាតម្លៃនៃការដាក់បញ្ច្រាសប៊ីតនោះទេ។ តម្លៃត្រឡប់នៅពេលប្រើប្រតិបត្តិករនេះគឺដូចខាងក្រោម។~x
#ERROR!-(x+1)
-(x+1)
តម្លៃនេះគឺស្មើនឹងការពិចារណាតម្លៃបញ្ចូល x ជាទម្រង់បំពេញបន្ថែមរបស់ពីរ ហើយដាក់បញ្ច្រាសប៊ីតទាំងអស់។
ដូចដែលបានរៀបរាប់ខាងលើនៅក្នុង Python នៅពេលដែលចំនួនគត់អវិជ្ជមានត្រូវបានបំប្លែងទៅជា binary string ដោយប្រើ bin(), format(), etc. វាមិនមែននៅក្នុងទម្រង់បំពេញបន្ថែមរបស់ two ទេ ប៉ុន្តែនៅក្នុងតម្លៃដាច់ខាតជាមួយនឹងសញ្ញាដក។ ដូច្នេះ ការបំប្លែង ~x ដោយផ្ទាល់ទៅខ្សែអក្សរនឹងមិននាំឱ្យខ្សែអក្សរដែលមានប៊ីតនៃតម្លៃដើមដាក់បញ្ច្រាសនោះទេ។
x = 9 # 0b1001 print(~x) print(bin(~x)) # -10 # -0b1010
នៅពេលដែលយើងអនុវត្តប្រតិបត្តិការ AND ហើយបង្វែរវាទៅជាខ្សែអក្សរនៃតំណាងការបំពេញបន្ថែមរបស់ពីរ យើងអាចឃើញថាប៊ីតនៃតម្លៃដើមត្រូវបានដាក់បញ្ច្រាស។
បន្ថែមពីលើនេះ ជាឧទាហរណ៍ ដើម្បីទទួលបានខ្សែអក្សរប៊ីតដែលជាខ្សែអក្សរប៊ីត 4 ខ្ទង់ដែលដាក់បញ្ច្រាសដូច (សញ្ញាប៊ីតបានលុបចោល) សូមប្រើទម្រង់ () ដើម្បីបំពេញលេខសូន្យសម្រាប់តម្លៃ ANDed ដូចខាងក្រោម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
វាជាការល្អប្រសើរជាងមុនក្នុងការគិតក្នុងន័យនៃខ្សែអក្សរនៃកន្សោមបំពេញបន្ថែមរបស់ទាំងពីរ ចាប់តាំងពីការគិតក្នុងន័យនៃលេខគឺមិនច្បាស់លាស់។