Python විසින් පහත bitwise operators සපයනු ලබන අතර, ඒවා පිළිවෙලින් ද්විමය නිඛිල ආකාරයේ int අගයක එක් එක් bit මත තාර්කික සංයෝජන, තාර්කික විසංයෝජනය, exclusive disjunction, bitwise inversion, left bit shift සහ right bit shift සිදු කරයි.
&
|
^
~
<<
>>
මෙම කොටසේදී අපි මුලින්ම පහත කරුණු පැහැදිලි කරන්නෙමු.
- ඡේදනය(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) |
---|---|---|---|---|
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-bit සඳහා
0b1111
(=0xf
) - 8-bit සඳහා
0xff
- 16-bit සඳහා
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 දෙකේ අනුපූරක ආකාරයක් ලෙස සලකා සියලු බිටු පෙරලීමට සමාන වේ.
ඉහත සඳහන් කළ පරිදි, Python හි, bin(), format() යනාදිය භාවිතා කර සෘණ නිඛිලයක් ද්විමය තන්තුවක් බවට පරිවර්තනය කරන විට, එය දෙකේ අනුපූරක ආකාරයෙන් නොව, සෘණ ලකුණක් සහිත නිරපේක්ෂ අගයකින් යුක්ත වේ. එබැවින්, ~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
සංඛ්යා අනුව සිතීම පැහැදිලි නැති නිසා දෙකේ අනුපූරක ප්රකාශනවල නූල් අනුව සිතීම වඩා හොඳය.