JavaRush /Java блогу /Random-KY /Java тилиндеги логикалык операторлор

Java тилиндеги логикалык операторлор

Группада жарыяланган
Java тorндеги логикалык операциялар.  Java тorнде биттик операциялар - 1

Java тorндеги логикалык операциялар

Логикалык операциялар логикалык операторлор аркылуу аткарылат. Тавтологияны кечириңиз, бирок так ушундай. Негизги логикалык операциялар (программалоодо жана математикада) логикалык аргументтерге (операндтарга) колдонулушу мүмкүн, ошондой эле сандар боюнча арифметикалык операцияларга окшош татаал туюнтмаларды түзүү үчүн колдонулушу мүмкүн. Мисалы, сөз айкашы:

(a | b) | (c < 100) & !(true) ^ (q == 5)
төрт операнддан турган татаал логикалык туюнтма: (a | b), мында ажана bтүрү өзгөрмөлөр boolean (c < 100) (true) (q == 5) .Өз кезегинде жөнөкөй логикалык туюнтма (a | b)да эки операнд аргументтен турат. Логикалык операнд - бул чын же жалган, чын же жалган деп айтууга болот . Java тorнде логикалык операнд типтин booleanже логикалык туюнтукту билдирет, мисалы:
  • (2 < 1)— логикалык операнд, анын мааниси жалган
  • true- логикалык операнд, анын мааниси айкын чындык
  • boolean a- логикалык операнд да болушу мүмкүн, логикалык а сыяктуу
  • int a = 2- логикалык операнд эмес , бул жөн гана түрдөгү өзгөрмөint
  • String a = "true"Ошондой эле логикалык операнд эмес . Бул текст мааниси болгон сап "true".
Javaда төмөнкү логикалык операциялар бар:
  • Логикалык жокко чыгаруу , ошондой эле инversion катары белгилүү NOT. !Java тorнде ал операнддын алдында “ ” белгиси менен белгиленет . Бир операндга колдонулат.
  • Логикалык жана , бул да ANDбириктирүү. &Ал колдонулган эки операнддын ортосундагы “ ” белгиси менен көрсөтүлөт .
  • Логикалык же Javaда , бул дагы - OR, бул да дизъюнкция. |Java тorнде ал эки операнддын ортосундагы “ ” белгиси менен белгиленет .
  • Эксклюзивдүү же , XOR, катуу дизъюнкция. ^Java тorнде ал эки операнддын ортосундагы “ ” белгиси менен белгиленет .
  • Java тorнде логикалык операторлор шарттуу же деп белгиленген ||, ошондой эле шарттуу жана - ды камтыйт &&.
Эскертүү: ошондой эле математикалык логикада эквиваленттүүлүк мамилени, башкача айтканда, теңдикти карашат. Бирок Java тorнде теңдик оператору==логикалык оператор болуп эсептелбейт. Көңүл бургула! Java тorнде логикалык операторлор&,|ошондой^эле бүтүн сандар үчүн колдонулат. Бул учурда алар бир аз башкача иштешет жана биттик (же биттик) логикалык операторлор деп аталат. Алар жөнүндө - макаланын аягына чейин. Келгиле, Java логикалык операторлорунун ар биринин кыскача сыпаттамасы менен tableны карап көрөлү, төмөндө биз аларды кененирээк сүрөттөп, codeдуу мисалдарды келтиребиз.
Java оператору аты Түр Кыскача сүрөттөмө Мисал
! Логикалык "жок" (башкаруу) Unary !x"х эмес" дегенди билдирет. Эгерде операнд жалган болсо, чындыкты кайтарат . Эгерде операнд чын болсо, false кайтарат . boolean x = true;
Анда
// !x == false
& Логикалык ЖАНА ( AND, көбөйтүү) Бинардык Эки операнд тең чын болсо, чындыкты кайтарат . a = true;
b = false;
Анда
a & b == false
| Логикалык ЖЕ ( OR, кошумча) Бинардык Эгерде операнддардын жок дегенде бири чын болсо, чындыкты кайтарат . a = true;
b = false;
Анда
a | b == true
^ Логикалык эксклюзив ЖЕ ( XOR) Бинардык Эгерде операнддардын бири гана чын болсо, чындыкты кайтарат . Эки операнд тең чын же жалган болсо , false кайтарат . Негизи, операнддар башкача болсо, ал чындыкты кайтарат. a = true;
b = false;
Анда
a ^ b == true
&& Шарттуу ЖАНА (кыска логикалык ЖАНА) Бинардык сыяктуу, &бирок сол жагындагы операнд false болсо &, бул оператор экинчи операндды текшербестен false кайтарат .
|| Шарттуу ЖЕ (кыска логикалык ЖЕ) Бинардык Окшош, |бирок сол жактагы оператор true болсо , оператор экинчи операндды текшербестен чындыкты кайтарат.

JavaRush курсундагы логикалык операциялар

Логикалык операциялардан кутулуу мүмкүн эмес жана JavaRush курсунда алар шарттар жана логикалык маалымат түрү менен бирге биринчи деңгээлден пайда болот. Программисттер акырындык менен математикалык логиканын ыкмаларын колдонууну үйрөнүшөт. Логикалык конструкциялар менен ишенимдүүрөөк манипуляциялар үчүн белгилүү бир эпчилдик жана белгилүү процесстерди түшүнүү талап кылынат. Ошентип, бул операцияларга Multithreading квестинин аягында дагы майда-чүйдөсүнө чейин жана такыр башка деңгээлде мамиле жасалат, анда окуучулардын көбү синтаксис жана конструкциялар менен түздөн-түз алаксып калбай, тапшырманын маңызына тереңдеп кирүүгө аракет кылышат.

Java тorндеги логикалык операциялар.  Java тorнде биттик операциялар - 2

Логикалык жокко чыгаруу оператору!

Бул оператор унардык, башкача айтканда, ал бир логикалык туюнтмага же операндга тиешелүү. Аны түшүнүү өтө жөнөкөй, ар кандай жокко чыгаруу сыяктуу: оператор жөн гана сөз айкашынын маанисин анын карама-каршысына өзгөртөт. Чындык tableсы же жокко чыгаруу операциясынын натыйжалары:
баалуулугу а
жалган чын
чын жалган
Мисал. Логикалык жокко чыгаруу операциясы
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       System.out.println(!a); // here our boolean expression reverses its value
       System.out.println(!false); // non-false expression, as you might guess, will be equal to... what?
       System.out.println(!(2 < 5)); // expression (2 < 5) is true, so its negation is false

   }
}
Программанын жыйынтыгы төмөнкүдөй болот:

false
true
false

Логикалык ЖАНА - &, ошондой эле шарттуу ЖАНА - &&

Логикалык ЖАНА же конъюнктура эки туюнтмага колдонулат жана анын натыйжасы эки операнд тең чындык болгондо гана чындык болот. aБашкача айтканда, эгерде же операнддарынын бири falseb болсо , анда экинчи оператордун маанисине карабастан туюнтма жалган болот . Эгер сиз чын 1 саны, ал эми жалган 0 деп элестетсеңиз, анда оператор кадимки көбөйтүүдөгүдөй иштейт. Ошондуктан, логикалык ЖАНА көбүнчө "логикалык көбөйтүү" деп аталат. Айтмакчы, бул факт оператордун операциясын тез эстеп калууга жардам берет жана аны логикалык же оператор менен чаташтырбоо . Чындык tableсы ЖАНА, бул да оператордун ишинин натыйжасыa & b&&|&
а б а&б
чын чын чын
чын жалган жалган
жалган чын жалган
жалган жалган жалган
Логикалык ЖАНА, ал ошондой эле бириктирүү, мисалдар:
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       boolean b = false;
       boolean c = true;
       System.out.println(a & b); // if we multiply true by false, we will definitely get false
       System.out.println(a & c); // true to true will be true
       System.out.println(false & (2 > 5));
 System.out.println((2 < 5) & false);
 // regardless of the truthfulness of the expression in brackets, in which case we have to be content with false
   }
}
Программанын жыйынтыгы:

false
true
false
false
Оператор &&кээде "кыска ЖАНА" деп аталат. Логикалык операнддар менен иштөөдө оператор сыяктуу эле натыйжаны берет &. Бирок, анын ишинин өзүндө айырма бар. Демек, сиз буга чейин байкагансыз, эгер a & b( ) туюнтмасындагы операнд afalse , анда операнддын маанисин текшерүүнүн мааниси жок : операциянын натыйжасы сөзсүз жалган болот . Ошентип, эгерде бизге экинчи операнддын мааниси түп-тамырынан бери керек болбосо, аны колдонуу менен биз программадагы эсептөөлөрдүн санын азайтабыз. Мисалдагы бардык операторлорду менен алмаштырсак , натыйжа так ошондой болот, бирок программанын өзү бир аз ылдамыраак иштейт (бирок биз муну байкабайбыз, анткени биз милли-микро... кыскача сөз кылып жатабыз. , абдан кичинекей убакыт бирдиктери). b&&&&&

Логикалык ЖЕ оператору |, ошондой эле шарттуу ЖЕ оператору ||

Java тorнде ЖЕ оператору символ менен көрсөтүлгөн |. Логикалык ЖЕ же дизъюнкция эки туюнтмага колдонулат жана анын натыйжасы эки операнд тең жалган болгондо гана жалган болот. Бул жерде биз кандайдыр бир деңгээлде оператордогудай эле сүрөттү байкайбыз &, бирок так карама-каршы. Башкача айтканда, жок дегенде бир операнд true болсо , анда туюнтма экинчи оператордун маанисине карабастан чындыккаa | b кепилдик берилет . Эгер ал логикалык көбөйтүү сыяктуу жүрсө, анда ЖЕ логикалык кошуу болуп саналат, эгер сиз чын 1 жана жалган 0 деп элестетсеңиз. Логикалык кошуу кадимки кошууга караганда башкача иштээрин унутпаңыз. Бул учурда 1 + 1 2ге эмес, 1ге барабар (бул системада 2 саны жөн эле жок). Кээде дизъюнкция 0 жана 1 максималдуу деп түшүнүлөт жана бул учурда, жок дегенде, бир операнд 1ге барабар болсо ( true ), биз так чындыкка ээ болобуз . ЖЕ чындык tableсы, ошондой эле оператордун натыйжасы катары белгилүү : &|
а б a | б
чын чын чын
чын жалган чын
жалган чын чын
жалган жалган жалган
Логикалык ЖЕ, ошондой эле дизъюнкция катары белгилүү, мисалы:
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       boolean b = false;
       boolean c = true;
       System.out.println(!a | b); // Compose the use of two logical operators: a == true, so !a, as we already know, is false.
       System.out.println(a | c);
       System.out.println((2 < 5) | false); // expression (2 < 5) is true, which means that for any second operand we get a true result
       System.out.println((2 > 5) | true);

   }
}
Натыйжа:

false
true
true
true
Эгерде биз шарттуу ЖЕ операторун колдонсок - ||ордуна |, биз так ушундай жыйынтыкка ээ болобуз, бирок шарттуу ЖАНАдагыдай эле &&, ал үнөмдүү иш-аракет кылат: эгерде биз биринчи операндга "чыгылсак" true га барабар болсок , мааниси экинчи операнд текшерилбейт, бирок ошол замат натыйжа чын болот .

XOR Java - логикалык эксклюзив ЖЕ - оператор ^

XOR^, модуль 2 кошуу, логикалык XOR, логикалык кемитүү, катуу дизъюнкция, биттик толуктоо... Буль алгебрасында оператордун көптөгөн аталыштары бар. Бул операторду эки операндга колдонуунун натыйжасы, эгерде операнддар башка болсо, чын болот, эгер операнддар бирдей болсо, жалган болот . Ошондуктан, аны нөлдөрдү ( жалган ) жана бирдерди ( чындык ) кемитүү менен салыштыруу ыңгайлуу . Чындык tableсы XOR, ошондой эле оператордун натыйжасы катары белгилүү ^:
Буль а Буль б а^б
чын чын жалган
чын жалган чын
жалган чын чын
жалган жалган жалган
Мисал:
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       boolean b = false;
       boolean c = true;
       System.out.println(!a ^ b); // Compose the use of two logical operators: a == true, so !a, as we already know, is false.
       System.out.println(a ^ c);
       System.out.println((2 < 5) ^ false);
       System.out.println((2 > 5) ^ true);
   }
}
Натыйжа:

false
false
true
true

Логикалык операциялардын артыкчылыгы

Математикадагыдай эле, программалоодо операторлор бир эле туюнтмада пайда болгондо белгилүү бир аткаруу тартибине ээ. Бирдик операторлор экorкке караганда артыкчылыктарга ээ, ал эми көбөйтүү (ал тургай логикалык да) кошууга караганда. Биз логикалык операторлорду тизмеде жогору койгонбуз, алардын артыкчылыктары ошончолук жогору:
  1. !
  2. &
  3. ^
  4. |
  5. &&
  6. ||
Келгиле, мисалдарды карап көрөлү. Конъюнкция жана дизъюнкция ( &жана |) ар кандай артыкчылыкка ээ:
public class Solution {
   public static void main(String[] args) {
       boolean a = true, b = true, c = false;
       System.out.println(a | b & c);
}
Эгерде биз солдон оңго карай жүрсөк, башкача айтканда, адегенде операторду колдонсок |, анан - , биз false& маанисин алабыз . Бирок, чындыгында, эгерде сиз бул программаны иштетсеңиз, анда сиз жыйынтык чын болоруна ишенесиз , анткени логикалык ЖАНА оператору логикалык ЖЕ операторуна караганда жогорураак артыкчылыкка ээ болот . Башаламандыкты болтурбоо үчүн, сиз эмнени көбөйтүүгө окшош, эмнени кошууга окшош экенин унутпашыңыз керек . Сиз артыкчылык тартибин өзгөртө аласыз. Мектеп математикасындай эле кашааларды колдонуңуз. Мисал codeубузду бир аз өзгөртөлү: &|&|
public class Solution {
   public static void main(String[] args) {
       boolean a = true, b = true, c = false;
       System.out.println((a|b)&c);
}
Иштер кандай? Алгач кашаанын ичинде логикалык кошууну, андан кийин көбөйтүүнү колдонобуз. Натыйжа жалган болот .

Татаал логикалык туюнтмалар

Албетте, биз логикалык туюнтмаларды жана операторлорду айкалыштыра алабыз. Макаланын башындагы сөздү эстейли:
(a | b) | (c < 100) & !(true) ^ (q == 5)
Азыр анча деле коркунучтуу эмес. Мурда , жана нын маанилерин аныктап a, анын маанисин көрсөткөн программаны жазалы . Татаал логикалык туюнтумдун маанисин эсептөөнүн мисалы bсq
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       boolean b = false;
       int c = 25;
       int q = 2;
       System.out.println((a|b) | (c < 100) & !(true)^(q == 5));
   }
}
Көңүл буруңуздар:qбиздин өзгөрмө тибинде int, бирок q == 5бул логикалык туюнтма жана ал жалганга барабар , анткени жогоруда биз q2 саны менен инициализациялаганбыз. Ошол эле өзгөрмө менен c. Бул сан 25ке барабар, бирок (c <100) чыныгыга барабар логикалык туюнтма . Бул программанын натыйжасы:

true
Татаал логикалык туюнтмалар өтө татаал жана тармактуу шарттарды текшерүү үчүн колдонулушу мүмкүн, бирок аларды ашыкча колдонууга болбойт: алар codeду окууну кыйындатат.

Биттик (биттик) операторлор

Макаланын башында биз операторлор &, |жана ^Java бүтүн сан түрлөрүнө карата колдонулушу мүмкүн экенин айттык. Бул учурда алар биттик операторлор. Алар биттик деп да аталат, анткени бир цифра бир бит жана бул операциялар атайын бит менен иштейт. Албетте, алар логикалык операторлорго караганда бир аз башкача иштешет жана кантип так түшүнүү үчүн экorк санауу системасы эмне экенин бorшиңиз керек. Эгерде сиз бул тууралуу эч нерсе билбесеңиз же таптакыр унутуп калсаңыз, анда биз сизге алгач Java макаласын окуп чыгууну сунуштайбыз: бит жана byte жана экorк санауу системасында эки гана цифра бар экенин эскертип коюңуз - 0 жана 1 жана бардык маалыматтар компьютерде шарттуу нөлдөрдү жана бирдерди колдонуу менен так көрсөтүлөт. Биз көнүп калган цифралардын кайсынысы болбосун (ондук; алар үчүн 0дөн 9га чейинки 10 түрдүү цифра бар, алар менен каалаган сандарды жазабыз) экorк санауу системасында көрсөтүлүшү мүмкүн. Сиз ондук санды экorк системага ырааттуу бөлүү аркылуу санауу системасынын негизин (2) колдонуп мамычага айландырсаңыз болот. Ар бир кадамда тескери тартипте жазылган бөлүү калдыктары бизге керектүү экorк санды берет. Бул жерде, мисалы, ондук сан 103 экorк көрсөтүүгө айландыруу болуп саналат: Java тorндеги логикалык операциялар.  Java тorнде биттик операциялар - 3

JavaRush курсундагы экorк санауу системасы

JavaRush курсунда алар MultiThreading квестин (10-деңгээл, 1-лекция) окуп жатканда экorк санауу системасы жөнүндө сүйлөшүшөт; лекциядан кийин консолидация үчүн бир нече тапшырмалар бар. Бирок, бул тема такыр эле кыйын эмес, эгер сиз курста анчалык деле алыс эмес болсоңуз да, сиз аны түшүнүп каласыз.

Мындан тышкары &, |жана ^Java да биттик операторлорду колдонот:
  • ~ биттик жокко чыгаруу оператору
  • >>бит жагынан оңго жылдыруу
  • >>>кол коюлбаган биттик оңго жылдыруу
  • <<солго жылдыруу
Жаңы баштагандарга биттик операторлор өтө чаташкан жана жасалма көрүнөт. Алар көбүнчө бorм берүү маселелерин чечүүдөн башка эмнеге керек экенин түшүнүшпөйт. Чынында, алар эффективдүү бөлүштүрүү жана көбөйтүүнү уюштуруу үчүн эң аз дегенде колдонулушу мүмкүн жана адистер аларды codeдоо/деcodeдоо, шифрлөө жана кокус сандарды түзүү үчүн колдонушат.

Битвалдык операторлор &, | жана ^

Келгиле, бул операторлор кантип иштээрин бир мисал карап көрөлү. Бизде эки бүтүн сан бар дейли:
int a = 25;
int b = 112; 
Биз аларга үч операцияны колдонушубуз керек &жана натыйжаны экранга чыгарышыбыз керек |. ^Бул жерде программанын codeу:
public class Solution {
   public static void main(String[] args) {

       int a = 25;
       int b = 112;

       int res1 = a & b;
       int res2 = a | b;
       int res3 = a ^ b;

       System.out.println("a & b = " + res1);
       System.out.println("a | b = " + res2);
       System.out.println("a ^ b = " + res3);

   }
}
Программанын жыйынтыгы төмөнкүдөй:

a & b = 16
a | b = 121
a ^ b = 105
Эмне болуп жатканын түшүнбөсөңүз, натыйжа абдан сырдуу көрүнөт. Чынында, баары көрүнгөндөн жөнөкөй. Бинардык операторлор операнд сандарын экorк формада "көрүшөт". Анан алар логикалык операторлорду &же эки сандын тиешелүү цифраларына (биттерине) |колдонушат . ^Ошентип, &25 санынын бинардык чагылдырылышынын акыркы битине логикалык түрдө 112 санынын бинардык өкүлчүлүгүнүн акыркы битине, акыркы бит менен акыркы битке кошулат жана башкалар: Ошол Java тorндеги логикалык операциялар.  Java тorнде биттик операциялар - 4эле логиканы жана |. ^_ Java тorндеги логикалык операциялар.  Java тorнде биттик операциялар - 5

Бит солго же оңго жылдыруу

Java-да бир нече бит нөөмөт операторлору бар. Эң көп колдонулган операторлор <<жана >>. Алар сандын бинардык чагылдырылышын тиешелүүлүгүнө жараша солго же оңго жылдырат, ал эми оңго жылган учурда белгини сактап калуу менен (төмөндө белгини сактоо эмнени билдирерин түшүндүрөбүз). Дагы бир оң нөөмөт оператору бар >>>. Ал ошол эле нерсени жасайт, бирок >>белгини сактаbyte. Ошентип, алардын ишин мисал менен карап көрөлү. int a = 13 a << 1а санынын экorк чагылдырылышынын бардык биттерин 1 битке солго жылдырат. Жөнөкөйлөтүү үчүн, келгиле, экorк системадагы 13 санын 0000 1101 деп элестетип көрөлү. Чынында, бул сан мындай көрүнөт: 00000000 00000000 00000000 00001101, анткени Java intсандар үчүн 4 byte же 32 бит бөлөт. Бирок, бул мисалда роль ойнобойт, ошондуктан бул мисалда биз саныбызды бир byte деп эсептейбиз. Java тorндеги логикалык операциялар.  Java тorнде биттик операциялар - 6Оң жакта бош калган бит нөлдөр менен толтурулат. Бул операциянын натыйжасында биз 26 санын алабыз. a << 2Ал сандын экorк чагылдырылышынын бардык биттерин a2 битке солго жылдырат, ал эми оң жакта бош калган эки бит нөлгө толтурулат. Жыйынтыгында 52 санын алабыз. a << 3Натыйжада 104 болот... Үлгүгө көңүл бурсаңарбы? Бит багыты боюнча n орунга солго жылдыруу aсанды an даражасына 2ге көбөйтүү сыяктуу иштейт. Ошол эле терс сандарга тиешелүү. Бул -13 << 3-104 натыйжа берет. a >> nn санынын бинардык көрүнүшүн оңго жылдырат. Мисалы, 13 >> 1 1101 санын 0110 санына айлантат, башкача айтканда, 6. Ал эми 13 >> 2натыйжа 3 болот. Башкача айтканда, бул жерде биз санды 2 ге n даражасына бөлөбүз, мында n - нөөмөттөрдүн саны оңго, бирок бир эскертүү менен: эгерде сан так болсо, бул операциянын жүрүшүндө биз сандын акыркы биттерин баштапкы абалга келтирген сыяктуубуз. Ал эми терс жактары менен абал бир аз башкача. Айталы, эгер сиз операцияны аткарууну сурансаңыз, программа эмне чыгара турганын текшерип көрүңүз -13 >> 1. Сиз ойлогондой -6 эмес, -7 санын көрөсүз. Бул терс сандар Java жана башка программалоо тилдеринде сакталган жол менен болот. Алар кошумча code деп аталган нерседе сакталат. Бул учурда эң маанилүү цифра (сол жактагы) белгинин астында берилет. Терс сан болгон учурда эң маанилүү цифра 1 болуп саналат.

Кошумча code

санын карап көрөлү int a = 13. Эгерде программада сиз анын бинардык өкүлчүлүгүн команданы колдонуп консолго басып чыгарсаңыз System.out.println(Integer.toBinaryString(a));, анда биз 1101 алабыз. Чынында, бул стенографиялык белги, анткени типтин номери intэстутумда 4 byte ээлейт, ошондуктан компьютер аны көбүрөөк "көрөт". Бул сыяктуу:

00000000 00000000 00000000 00001101
Эң маанилүү цифра нөл, бул бизде оң сан бар дегенди билдирет. Кошумча codeго айландыруу үчүн:
  1. Биз "түз code" деп аталган -13 санын жазабыз. Бул үчүн, сандын эң маанилүү цифрасын 1ге алмаштырыңыз.
    Аракеттин натыйжасы:

    
    10000000 0000000 0000000 00001101
  2. Андан кийин, белги битинен башка бардык биттерди (биз 0дөн 1ге, 1ден 0гө алмаштырабыз) тескерилейбиз. Чынында, биз аны эчак эле өзгөрттүк.
    Акциянын натыйжасы:

    
    11111111 11111111 11111111 11110010

    (ооба, 1 жана 2-кадамдарды айкалыштырса болот, бирок муну ушундай деп ойлогон жакшы)

  3. Натыйжадагы санга 1 кошуу.
    Аракеттин натыйжасы:

    
    11111111 11111111 11111111 11110011
Натыйжадагы экorк сан -13, экинин толуктоочу codeунда жазылган жана биттин жылышы (жана башка операциялар) ага атайын колдонулат. Бул жөн гана операция логикасынын айырмасы бардык операцияларда байкалbyte. Айталы, ошол эле солго жылыш үчүн айырма байкалbyte, биз терс сандар менен оң сандар менен иштегендей иштей алабыз. Эми оңго жылалы -13 >> 1. Биздин оператор >>белгини сактап калгандыктан, бул операцияда сол жакта бошогон бардык биттер нөл менен эмес, бирдик менен толтурулат. Ошентип, номерди алмаштыруу

11111111 11111111 11111111 11110011
бир бит оңго, натыйжада биттердин төмөнкү ырааттуулугу:

11111111 11111111 11111111 11111001
Эгерде биз бул санды түз codeго айландырсак (б.а. адегенде 1ди кемитип, андан кийин биринчиден башка бардык биттерди инверттесек), биз санды алабыз:

10000000 00000000 00000000 00000111
же -7. Эми биз белгини сактаган оң нөөмөт операторун түшүнгөнүбүздөн кийин, анын оператордон кандай айырмасы бар экени айкын болот >>>. a >>> n— бул операция кол коюлбаган жылдыруу, башкача айтканда, ал сандын экorк көрсөтүлүшүн an битке оңго жылдырат, бирок сол жакта бошогон n битти оператор сыяктуу бирөөлөр менен эмес, >>нөлдөр менен толтурат. Операция жасайлы -13 >>> 1. -13Бизде эки толуктоочу сан бар :

11111111 11111111 11111111 11110011
Оңго 1 битке жылып, бош битти нөлгө толтуруу менен төмөнкү санды алабыз:

01111111 11111111 11111111 11111001
Ондук системадагы сан эмнени берет 2147483641.

биттик жокко чыгаруу оператору ~

Бул унардык оператор абдан жөнөкөй иштейт: ал бүтүн сандын экorк чагылдырылышынын ар бир битине тескери иштейт. номерин алалы -13:

11111111 11111111 11111111 11110011
Биттик жокко чыгаруу операциясы ~13жөн гана ар бир биттин маанисин тескери кылат. Натыйжада, биз алабыз:

00000000 00000000 00000000 00001100
Же 12ондук түрүндө.

Кыскача корутундулар

  • Бардык логикалык операторлор буль туюнтмаларына, башкача айтканда, чын же жалган деп айтууга болот .
  • Если операторы &, | or ^ применяются к числам, речь идёт уже не о логических операциях, а о побитовых. То есть оба числа переводятся в двоичную систему и к этим числам побитово применяют операции логического сложения, умножения or вычитания.
  • В математической логике операторам & и | соответствуют конъюнкция и дизъюнкция.
  • Логическое И похоже на умножения 1 (true) и 0 (false).
  • Логическое ИЛИ напоминает поиск максимума среди 1 (true) и 0 (false).
  • Для побитового отрицания целого числа a используется операция ~a.
  • Для логического отрицания булевского выражения a используется операция !a.
  • Отрицательные числа хранятся и обрабатываются в дополнительном codeе.
  • Поразрядный сдвиг вправо может сохранять знак (>>), а может — не сохранять (>>>).
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION