Python сәйкесінше екілік бүтін түр int мәнінің әрбір битінде логикалық конъюнкцияны, логикалық дизъюнкцияны, эксклюзивті дизъюнкцияны, разрядтық инверсияны, солға разрядты жылжытуды және оңға разрядты жылжытуды орындайтын келесі разрядтық операторларды қамтамасыз етеді.
&
|
^
~
<<
>>
Бұл бөлімде біз алдымен келесіні түсіндіреміз.
- қиылысу(AND) :
&
- дизъюнкция(OR) :
|
- ЭКСКЛЮЗИВ-НЕМЕСЕ операция(XOR) :
^
Әрі қарай, біз келесілерді талқылаймыз.
- Теріс бүтін сандарға разрядтық амалдар
- аздап айналдыру( NOT) :
~
- бит жылжу:
<<
,>>
Бүтін сандарды екілік, сегіздік және он алтылық жүйеде жазу жолы және екілік, сегіздік және он алтылық сандар мен жолдарды келесі функцияларды пайдаланып түрлендіру жолы туралы қосымша ақпаратты келесі мақаланы қараңыз.
bin()
oct()
hex()
format()
- Қатысты мақалалар:Python тілінде екілік, сегіздік және он алтылық сандар мен жолдарды бір-біріне және бір-біріне түрлендіру
Сондай-ақ, биттік амалдардың орнына логикалық мәндердегі (шын, жалған) логикалық операциялар (логикалық операциялар) үшін келесі мақаланы қараңыз. және,немесе &,| орнына пайдаланыңыз.
- Қатысты мақалалар:Python логикалық операторлары және, немесе, және емес (логикалық конъюнкция, дизъюнкция, терістеу)
қиылысу(AND) :&оператор
Бұл логикалық мысал және & операторы, нәтиже bin() арқылы екілік белгілеудегі жолға түрлендіріледі.
x = 9 # 0b1001 y = 10 # 0b1010 print(x & y) print(bin(x & y)) # 8 # 0b1000
дизъюнкция(OR) :|оператор
| қолданатын логикалық туындының (НЕМЕСЕ) мысалы операторы, нәтиже bin() арқылы екілік белгілердегі жолға түрлендіріліп, бірге шығарылады.
print(x | y) print(bin(x | y)) # 11 # 0b1011
ЭКСКЛЮЗИВ-НЕМЕСЕ операция(XOR) :^оператор
bin() арқылы екілік белгілеудегі жолға түрлендіру нәтижесімен біріктірілген ^ операторын пайдаланатын логикалық өнім (XOR) мысалы.
print(x ^ y) print(bin(x ^ y)) # 3 # 0b11
Әр логикалық бит үшін кіріс пен шығыс арасындағы байланыс ЖӘНЕ, НЕМЕСЕ және XOR төмендегі кестеде көрсетілген.
Кіріс 1 | Кіріс 2 | қиылысу(AND) | дизъюнкция(OR) | ЭКСКЛЮЗИВ-НЕМЕСЕ операция(XOR) |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
Теріс бүтін сандарға разрядтық амалдар
Теріс бүтін санға разрядтық операция орындалғанда, мән екі толықтауыш түрінде көрсетілгендей өңделеді.
Дегенмен, егер сіз bin() немесе format() арқылы теріс бүтін санды екілік жолға түрлендірсеңіз, абсолютті мәнде екі толықтауыш пішімінің орнына минус белгісі болатынын ескеріңіз.
Екі толықтауыш көрінісі бар жолды алғыңыз келсе, төменде көрсетілгендей, талап етілетін бит цифрларының ең көп санымен ЖӘНЕ алыңыз.
- 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 тілінде теріс бүтін сан bin(), format() арқылы екілік жолға түрлендірілсе, ол екінің толықтауыш түрінде емес, минус таңбасы бар абсолютті мәнде болады. Сондықтан ~x мәнін тікелей жолға түрлендіру бастапқы мәннің биттері төңкерілген жолға әкелмейді.
x = 9 # 0b1001 print(~x) print(bin(~x)) # -10 # -0b1010
ЖӘНЕ операциясын орындап, оны екі толықтауыш бейнелеу жолына айналдырғанда, бастапқы мәннің разрядтары инверттелгенін көреміз.
Бұған қоса, мысалы, сол күйінде төңкерілген 4 разрядты бит жолы болып табылатын бит жолын алу үшін (белгі биті өткізілмейді), ANDed мәні үшін нөлдерді төмендегідей толтыру үшін format() пайдаланыңыз.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
Екінің толықтауыш өрнектерінің қатары бойынша ойлаған дұрыс, өйткені сандар арқылы ойлау анық емес.