Python bitwise operatorları (məntiqi məhsul, məntiqi OR, eksklüziv OR, inversiya, shift)

Biznes

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()

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.

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ş 1Giriş 2kəsişmə(AND)disjunksiya(OR)EKSKLÜZİV-VƏ YA əməliyyat(XOR)
11110
10011
01011
00000

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 üçün0b1111(=0xf)
  • 8-bit üçün0xff
  • 16 bit üçün0xffff

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

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.