Python aşağıdakı bitwise operatorlarını təmin edir ki, onlar müvafiq olaraq ikili tam tipli int dəyərinin hər bitində məntiqi birləşmə, məntiqi disjunksiya, eksklüziv disjunksiya, bit istiqamətində inversiya, sola bit sürüşdürmə və sağ bit sürüşməsini həyata keçirir.
&
|
^
~
<<
>>
Bu bölmədə əvvəlcə aşağıdakıları izah edirik.
- kəsişmə(AND) :
&
- disjunksiya(OR) :
|
- EKSKLÜZİV-VƏ YA əməliyyat(XOR) :
^
Sonra, aşağıdakıları müzakirə edəcəyik.
- Mənfi tam ədədlər üzərində bit istiqamətində əməliyyatlar
- bir az çevirmək( NOT) :
~
- bit sürüşmə:
<<
,>>
Tam ədədləri ikilik, səkkizlik və onaltılıq sistemlərdə necə yazmaq, ikili, səkkizlik və onaltılıq ədədləri və sətirləri aşağıdakı funksiyalardan istifadə etməklə necə çevirmək barədə ətraflı məlumat üçün aşağıdakı məqaləyə baxın.
bin()
oct()
hex()
format()
- Əlaqədar Məqalələr:Python-da ikilik, səkkizlik və onaltılıq ədədləri və sətirləri bir-birinə və bir-birinə çevirin
Həmçinin, bitwise əməliyyatları yerinə məntiqi dəyərlər (doğru, yanlış) üzərində məntiqi əməliyyatlar (Boolean əməliyyatları) üçün aşağıdakı məqaləyə baxın. və, və ya &,| əvəzinə istifadə edin.
- Əlaqədar Məqalələr:Python-un məntiqi operatorları və, və ya, və deyil (məntiqi birləşmə, disjunksiya, inkar)
kəsişmə(AND) :&operator
Bu məntiqi bir nümunədir VƏ & operator, nəticə bin() ilə binar notasiyada sətirə çevrilir.
x = 9 # 0b1001 y = 10 # 0b1010 print(x & y) print(bin(x & y)) # 8 # 0b1000
disjunksiya(OR) :|operator
| istifadə edərək məntiqi məhsulun (OR) nümunəsi operator, nəticə bin() ilə binar notasiyada sətirə çevrilir və birlikdə çıxış edir.
print(x | y) print(bin(x | y)) # 11 # 0b1011
EKSKLÜZİV-VƏ YA əməliyyat(XOR) :^operator
bin() istifadə edərək ikili notasiyada sətirə çevrilmə nəticəsi ilə birləşdirilmiş ^ operatorundan istifadə edən məntiqi məhsulun (XOR) nümunəsi.
print(x ^ y) print(bin(x ^ y)) # 3 # 0b11
Məntiqi AND, OR və XOR-un hər bir biti üçün giriş və çıxış arasındakı əlaqə aşağıdakı cədvəldə göstərilmişdir.
Giriş 1 | Giriş 2 | kəsişmə(AND) | disjunksiya(OR) | EKSKLÜZİV-VƏ YA əməliyyat(XOR) |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
Mənfi tam ədədlər üzərində bit istiqamətində əməliyyatlar
Mənfi tam ədəd üzərində bit üzrə əməliyyat yerinə yetirildikdə, dəyər ikinin tamamlayıcı formasında ifadə edilmiş kimi işlənir.
Bununla belə, qeyd edin ki, bin() və ya format() istifadə edərək mənfi tam ədədi ikili sətirə çevirsəniz, mütləq dəyər ikinin tamamlayıcı formatı əvəzinə mənfi işarəyə sahib olacaq.
Əgər ikinin tamamlayıcı təsviri olan sətir əldə etmək istəyirsinizsə, aşağıda göstərildiyi kimi tələb olunan maksimum bit rəqəmləri ilə AND seçin.
- 4-bit üçün
0b1111
(=0xf
) - 8-bit üçün
0xff
- 16 bit üçün
0xffff
Siz ikinin tamamlayıcı təsvirindən ibarət sətir əldə edə bilərsiniz (hər bit tərs çevrilir və 1 əlavə olunur).
x = -9 print(x) print(bin(x)) # -9 # -0b1001 print(bin(x & 0xff)) print(format(x & 0xffff, 'x')) # 0b11110111 # fff7
- Əlaqədar Məqalələr:Python-da ikilik, səkkizlik və onaltılıq ədədləri və sətirləri bir-birinə və bir-birinə çevirin
bir az çevirmək:~operator
~ operatorlarla bit çevirmə nümunəsi.
Bitwise inversiya sadəcə çevrilmiş hər bitin dəyəri deyil. Bu operatordan istifadə edərkən qaytarılan dəyər aşağıdakı kimidir.~x
#ERROR!-(x+1)
-(x+1)
Bu dəyər daxil olan x dəyərini ikinin tamamlayıcı forması kimi nəzərdən keçirməyə və bütün bitləri tərsinə çevirməyə bərabərdir.
Yuxarıda qeyd edildiyi kimi, Python-da min(), format() və s.-dən istifadə etməklə mənfi tam ədəd binar sətirə çevrildikdə, o, ikinin tamamlayıcı formasında deyil, mənfi işarəli mütləq qiymətdədir. Buna görə də, ~x-i birbaşa sətirə çevirmək orijinal dəyərin bitlərinin tərsinə çevrildiyi sətirlə nəticələnməyəcək.
x = 9 # 0b1001 print(~x) print(bin(~x)) # -10 # -0b1010
AND əməliyyatını yerinə yetirib onu ikinin tamamlayıcı təsvirindən ibarət sətirə çevirdiyimiz zaman ilkin qiymətin bitlərinin tərsinə çevrildiyini görə bilərik.
Bundan əlavə, məsələn, olduğu kimi tərsinə çevrilmiş 4 rəqəmli bit sətri olan bit sətrini əldə etmək üçün (işarə biti buraxılıb), format() funksiyasından istifadə edərək ANDed dəyəri üçün sıfırları aşağıdakı kimi doldurun.04b'
print(bin(~x & 0xff)) print(format(~x & 0b1111, '04b')) # 0b11110110 # 0110
bit sürüşmə:<<,>>
Bit dəyişdirmə operatorlarından istifadə edərək sola bit dəyişdirmə və sağ bit sürüşdürmə nümunələri.
x = 9 # 0b1001 print(x << 1) print(bin(x << 1)) # 18 # 0b10010 print(x >> 1) print(bin(x >> 1)) # 4 # 0b100
Mənfi dəyərlər üçün işarə biti uzadılır və dəyişdirilir və müsbət/mənfi işarə eyni qalır. Mənfi dəyər sola qədər 1s xəttinin şəklidir.
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
İkinin tamamlayıcı ifadələrinin sətirləri ilə düşünmək daha yaxşıdır, çünki rəqəmlərlə düşünmək aydın deyil.