JavaRush /Java блогу /Random-KY /Java операторлоруна киришүү: логикалык, арифметикалык, би...

Java операторлоруна киришүү: логикалык, арифметикалык, биттик

Группада жарыяланган
Келгиле, Java тorндеги операциялар жөнүндө сүйлөшөлү: сандык, логикалык, биттик. Бул программалоону үйрөнүү үчүн сөзсүз керек болгон теориялык негиз. Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 1

Javaдагы операторлордун кандай түрлөрү бар?

Кандайдыр бир операция үчүн бизге жок дегенде эки нерсе керек:
  • оператор;
  • операнд.
Оператордун мисалы эки санды кошуу операциясында жөнөкөй плюс болот. Ал эми бири-бирине кошулган сандар бул учурда операнд болот. Ошентип, операторлордун жардамы менен биз бир же бир нече операнддар боюнча операцияларды аткарабыз. Эки операнд боюнча операцияларды аткарган операторлор бинардык деп аталат. Мисалы, эки санды кошуу. Бир операнд боюнча операцияларды аткарган операторлор унардык деп аталат. Мисалы, унардык минус.

JavaRush курсундагы Java операторлору

Бир нече лекциялар биринчи квесттин төртүнчү деңгээлинде Java операторлоруна арналган - Java Синтаксиси. Атап айтканда, логикалык сыяктуу шарттуу операторлор . Курста салыштыруу операторлорунун, шарттуу операторлордун жана логикалык операторлордун иштерин түшүнүүгө жардам бере турган 22 тапшырма бар.

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

Программисттердин сандарда аткарган эң кеңири тараган операциясы өзгөрмөгө сандык маани берүү. Ал, оператор сыяктуу, =сизге тааныш:
int a = 1;
int b = 2;
int c = 3;
Арифметикалык амалдар да бар. Алар бинардык арифметикалык операторлор аркылуу ишке ашырылат:
Таблица 1. Бинарлык арифметикалык операторлор
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 2Биринчи төрт оператор эч кандай суроо бербеши керек: баары математикадагыдай. Акыркы оператор, бөлүмдүн калган бөлүгү да өтө татаал эч нерсе жасаbyte. Мисалы, 24тү 7ге бөлсөк, 3 бүтүн сан жана 3 калдык алабыз. Бул оператор кайтарып бере турган калган:
System.out.println(24 % 7); // prints 3
Бул жерде Oracle documentациясынын расмий сайтынан мисалдар келтирилген: Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 3Бул программа төмөнкүлөрдү чыгарат: 1 + 2 = 3 3 - 1 = 2 2 * 2 = 4 4 / 2 = 2 2 + 8 = 10 10 % 7 = 3 Java сизге мүмкүндүк берет бириктирүү үчүн: мисалы, операторлордун тапшырмалары жана арифметикалык операторлор. Келгиле, бир мисал карап көрөлү:
int x = 0;
x = x + 1; // x = 0 + 1 => x = 1
x = x + 1; // x = 1 + 1 => x = 2
x = x + 1; // x = 2 + 1 => x = 3
Бул жерде биз өзгөрмө аныктап x, ага нөл маанисин ыйгардык. xАндан кийин, ар бир сапта өзгөрмөнүн учурдагы маанисинин суммасына бир маани беребиз x. Ар бир сап үчүн комментарийлерде түшүндүрмөлөр бар. Бул proceduresа өзгөрүүчүнү көбөйтүү же көбөйтүү деп аталат. Жогорудагы мисалдагы көбөйтүү операциясын операторлордун айкалышы аркылуу окшош операция менен алмаштырууга болот:
int x = 0;
x += 1; // x = 0 + 1 => x = 1
x += 1; // x = 1 + 1 => x = 2
x += 1; // x = 2 + 1 => x = 3
Сиз дайындоо операторун каалаган арифметикалык оператор менен айкалыштыра аласыз:
int x = 0;
x += 10; // x = 0 + 10 => x = 10
x -= 5; // x = 10 - 5 => x = 5
x *= 5; // x = 5 * 5 => x = 25
x /= 5; // x = 25 / 5 => x = 5
x %= 3; // x = 5 % 3 => x = 2;
Келгиле, акыркы мисал кантип иштээрин көрсөтөлү:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 4
Java экorк операторлордон тышкары унардык арифметикалык операторлорго ээ.
Таблица 2. Бирдиктүү арифметикалык операторлор:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 4Бирдиктүү плюс менен минустын мисалы:
int x = 0;
x = (+5) + (+15); // Parentheses for clarity, it is possible without them
System.out.println("x = " + x);

int y = -x;
System.out.println("y = " + y);
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 6
Көбөйтүү жана азайтуу операциялары негизинен жөнөкөй. Биринчи учурда өзгөрмө 1ге көбөйтүлөт, экинчисинде өзгөрмө 1ге азаят. Мисал төмөндө:
int x = 9;
x++;
System.out.println(x); // 10

int y = 21;
y--;
System.out.println(y); // 20
Бул операциялардын эки түрү бар - постфикс жана префикс. Биринчи учурда оператор өзгөрмөдөн кийин, экинчисинде өзгөрмөнүн алдына жазылат. Бир гана айырма - көбөйтүү же азайтуу операциясы аткарылганда. Төмөнкү tableда мисал жана сүрөттөлүшү. Бизде өзгөрмө бар дейли:
int a = 2;
Анда:
Таблица 3. Көбөйтүү-кемитүү операторлору:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 5Демонстрация:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 8
Арифметикадан тышкары, салыштыруу амалдары (эки сандын) бар. Натыйжа ар дайым чын же жалган болот ( чын / жалган ).
Таблица 4. Салыштыруу операторлору
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 9Мисалдар:
int a = 1;
int b = 2;

boolean comparisonResult = a == b;
System.out.println("a == b :" + comparisonResult);

comparisonResult = a != b;
System.out.println("a != b :" + comparisonResult);

comparisonResult = a > b;
System.out.println("a >  b :" + comparisonResult);

comparisonResult = a >= b;
System.out.println("a >= b :" + comparisonResult);

comparisonResult = a < b;
System.out.println("a <  b :" + comparisonResult);

comparisonResult = a <= b;
System.out.println("a <= b :" + comparisonResult);
Демонстрация:
Java операторлоруна киришүү: логикалык, арифметикалык, биттик – 10

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

Келгиле, алардын ар биринин логикалык амалдарын жана чындык tableларын карап көрөлү:
  • жокко чыгаруу операциясы ( NOT);
  • конъюнктура операциясы, логикалык ЖАНА ( AND);
  • дизъюнкция операциясы, логикалык ЖЕ ( OR);
  • модулдук кошуу операциясы, өзгөчө ЖЕ ( XOR).
Терс оператору унардык жана бир операндга колдонулат. Бардык башка операциялар бинардык болуп саналат. Бул операциялардын чындык tableларын карап көрөлү. Бул жерде 0 Java тorндеги жалгандын эквиваленти , ал эми 1 - true эквиваленти .
Таблица 5. Жок кылуу оператору Чындык tableсы (ЭМЕС)
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 7
Таблица 6. Конъюнктура операторунун чындык tableсы (ЖАНА)
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 8
Таблица 7. Disjunction операторунун чындык tableсы (OR)
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 9
Таблица 8. Модулдук кошуу операторунун чындык tableсы (XOR)
Java операторлоруна киришүү: логикалык, арифметикалык, биттик – 10Java бирдей логикалык операцияларга ээ:
  • !— жокко чыгаруу оператору;
  • &&— логикалык ЖАНА оператору (кыскача);
  • ||— логикалык ЖЕ оператору (кыскача);
  • &— биттик ЖАНА оператору;
  • |— биттик ЖЕ оператору;
  • ^— биттик эксклюзивдүү ЖЕ оператор.
Келгиле, биттик жана стенографиялык операторлордун ортосундагы айырманы карап көрөлү, ал эми бардык чындык tableларын Java codeуна айландыралы:
public class LogicDemo {

   public static void main(String[] args) {
    notExample();
    andExample();
    orExample();
    xorExample();
   }

   public static void notExample() {
    System.out.println("NOT EXAMPLE:");
    System.out.println("NOT false = " + !false);
       System.out.println("NOT true  = " + !true);
    System.out.println();
   }

   public static void andExample() {
    System.out.println("AND EXAMPLE:");
    System.out.println("false AND false = " + (false & false));
    System.out.println("false AND true  = " + (false & true));
    System.out.println("true  AND false = " + (true & false));
    System.out.println("true  AND true  = " + (true & true));
    System.out.println();
   }

   public static void orExample() {
    System.out.println("OR EXAMPLE:");
    System.out.println("false OR false = " + (false | false));
    System.out.println("false OR true  = " + (false | true));
    System.out.println("true  OR false = " + (true | false));
     System.out.println("true  OR true  = " + (true | true));
    System.out.println();
   }

   public static void xorExample() {
    System.out.println("XOR EXAMPLE:");
    System.out.println("false XOR false = " + (false ^ false));
    System.out.println("false XOR true  = " + (false ^ true));
    System.out.println("true  XOR false = " + (true ^ false));
    System.out.println("true  XOR true  = " + (true ^ true));
    System.out.println();
   }
}
Бул программа төмөнкүнү көрсөтөт: МИСАЛ ЭМЕС: ЖАЛГАН ЭМЕС = чын ЭМЕС = жалган ЖАНА МИСАЛ: false ЖАНА false = false false ЖАНА чындык = false true ЖАНА false = false true ЖАНА чындык = чын ЖЕ МИСАЛ: false OR false = false false OR true = чын чын ЖЕ жалган = чын чын ЖЕ чын = чын XOR МИСАЛ: жалган XOR жалган = жалган XOR чын = чын чын XOR жалган = чын чын XOR чыныгы = жалган Логикалык операторлор өзгөрмөлөргө гана колдонулат boolean. Биздин учурда, биз аларды түздөн-түз маанилерге колдондук, бирок сиз аларды booleanөзгөрмөлөр менен да колдоно аласыз:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 15
Жана booleanтуюнтмаларга:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 16
Эми бизде стенографиялык операторлор ( &&, ||) жана окшош биттик операторлор ( &, |) бар. Алардын ортосунда кандай айырма бар? Биринчиден, бүтүн сандарга бит боюнча колдонулушу мүмкүн. Бул тууралуу бир аздан кийин сүйлөшөбүз. Экинчиден, кээ бирлери кыскартылган, ал эми башкалары жок. Аббревиатура кандай экенин түшүнүү үчүн, келгиле, сөз айкашын карап көрөлү:

false AND x = ?
true OR x = ?
Бул xкаалаган логикалык маанини ала алат. Ал эми жалпысынан логиканын жана чындык tableларынын мыйзамдарына ылайык, анын x чын же жалган экендигине карабастан , биринчи туюнтуунун натыйжасы жалган , экинчисинин натыйжасы туура болот . Кара.
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 17
Кээде туюнтуунун натыйжасын биринчи операнддан эсептөөгө болот. Бул кыскартылган операторлорду &&жана ||. Жогоруда айтылгандарга окшош туюнтмаларда алар экинчи операнддын маанисин баалаbyte. Бул жерде кичинекей бир мисал:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 18
Стенографиялык операторлордо туюнтумдун экинчи бөлүгү бааланbyte. Бирок бул туюнтуунун натыйжасы биринчи операнддан эле көрүнүп турганда гана болот.

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

Мына, биз эң кызыктуу бөлүгүнө келдик: биттик операциялар. Аты айтып тургандай, бул биттерде аткарылуучу операциялар. Бирок биз бул темага киришүүдөн мурун, ага байланыштуу чөйрөлөр жөнүндө сөз кылуу керек.

Сандардын экorк санауу системасында көрсөтүлүшү

Сандар, программадагы башка маалымат сыяктуу эле, компьютердин эсинде экorк codeдо сакталат. Бинардык code - бул нөлдөрдүн жана бирдиктердин жыйындысы. Ар бир нөл же бир бит деп аталган маалыматтын бирдигин билдирет.

Wikipedia боюнча:

Бит (англис тorнен binary digit - бинардык сан; ошондой эле сөз ойноо: англисче бит - даана, бөлүкчө) маалыматтын көлөмүн өлчөө бирдиги. 1 бит маалымат эки мааниге ээ боло турган символ же сигнал: күйгүзүү же өчүрүү, ооба же жок, жогорку же төмөн, заряддуу же зарядсыз; бинардык системада 1 (бир) же 0 (нөл) болот.

Биттик операторлор кандай маалыматтар менен иштешет?

Java тorнде биттик операциялар бүтүн сандарда гана аткарылат. Бүтүн сандар компьютердин эсинде биттердин жыйындысы катары сакталат. Компьютер ар кандай маалыматты экorк санауу системасына (биттердин жыйындысы) айландырат жана андан кийин гана аны менен өз ара аракеттенет деп айта алабыз. Бирок экorк санауу системасы кантип иштейт? Ондук сан системасында бизде 10 гана символ бар: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Биз бул символдорду санап чыгууда колдонобуз. 9дан кийин 10 келет, 19дан кийин - 20, 99дан кийин - 100, 749дан кийин - 750. Башкача айтканда, биз колдо болгон 10 символдун айкалышын колдонобуз жана аларды “нөлдөн түшкү тамакка” санаганда колдоно алабыз. Экorк санауу системасында он символдун ордуна экөө гана бар - 0, 1. Бирок бул символдорду ондук системадагыдай принцип боюнча бириктирип, чексиз санай алабыз.
Ондук жана экorк системада 0дөн 15ке чейин санаганды көрсөтөлү:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 11Көрүнүп тургандай, баары ушунчалык татаал эмес. Биттерден тышкары, башка тааныш маалымат бирдиктери бар - byte , килоbyte , мегаbyte , гигаbyte ж.б. Сиз 1 byteта 8 бит бар экенин билсеңиз керек . Бул эмнени билдирет? Бул катардагы 8 бит 1 byteты ээлейт дегенди билдирет. Бул жерде byte болушу мүмкүн болгон мисалдар:

00000000 - 1 byte
10110010 - 1 byte
01011011 - 1 byte
Бир byteтагы биттердин мүмкүн болгон кайталанбаган комбинацияларынын саны 256 (2 8 = 256). Бирок келгиле, Javaга жакыныраак кайрылып көрөлү. Мындай бүтүн маалымат түрү бар - byte. Бул тип -128ден 127ге чейинки маанилерди кабыл алышы мүмкүн жана компьютердин эс тутумундагы бир сан так 8 бит же 1 byte ээлейт. byteМындай типтеги бир номер компьютердин 1 эс тутумун ээлейт . Ал эми бул жерде ысымдар кокусунан дал келбейт. Эсибизде болгондой, 1 byte 256 түрдүү маанини сактай алат. Ал эми бир типтеги сан byte256 ар кандай маанилерди ала алат (128 терс, 127 оң жана 1 нөл). Ар бир сандын мааниси byteсегиз биттен турган уникалдуу топтомго ээ. Бул түрү гана эмес byte, бардык интегралдык түрлөрү үчүн. Түрү byteэң кичинеси катары мисал катары берилген. Төмөнкү table Java бүтүн сан түрлөрүн жана алар ээлеген эс мейкиндигин көрсөтөт: Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 12түрүн карап көрөлү int. Ал 2147483648 терс маанилерди, 2147483647 оң маанилерди жана бир нөлдү сактай алат. Бардыгы:

2147483648 + 2147483647 + 1 = 4294967296.
Бул тип компьютердин эсинде 32 битти ээлейт. 32 нөл жана бир топтомунан мүмкүн болгон комбинациялардын саны:
232 = 4294967296.
Түрү кармай турган маанилердин саны менен бирдей сан int. Бул жөн гана маалымат түрүнүн маанилеринин диапазону менен анын өлчөмүнүн (эсте турган биттердин саны) ортосундагы мамиленин демонстрациясы. Javaдагы каалаган санды экorкке айландырууга болот. Келгиле, муну Java тorн колдонуу менен канчалык оңой жасоого болорун карап көрөлү. Биз типтеги мисалдан үйрөнөбүз int. Бул түрдүн өзүнүн таңгыч классы бар - Integer. Анын toBinaryStringбиз үчүн бардык ишти жасай турган бирөө бар:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 21
Voila - бул татаал эмес. Бирок дагы эле бир нерсени такташ керек. intсаны 32 бит алат. Бирок жогорудагы мисалдагы 10 санын басып чыгарганда, консолдо 1010ду көрөбүз.Анткени алдыңкы нөлдөр басылbyte. Эгерде алар көрсөтүлсө, анда 1010дун ордуна биз консолдо 000000000000000000000000000001010 көрмөкпүз. Бирок кабыл алуу оңой болушу үчүн бардык алдыңкы нөлдөр алынып салынган. Өзүңө суроо бермейинче кыйын эмес: терс сандар жөнүндө эмне айтууга болот? Ал маалыматты экorк системада гана кабыл алат. Көрсө, минус белгисин да экorк code менен жазуу керек экен. Бул түз же кошумча codeдун жардамы менен жасалышы мүмкүн.

Түз code

Эң маанилүү бит (эң сол бит) сандын белгисине бөлүнгөн экorк санауу системасында сандарды көрсөтүү ыкмасы. Эгерде сан оң болсо, эң сол бит 0, терс болсо - 1 деп жазылат.
Мисал катары 8 биттик санды колдонуп муну карап көрөлү:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 13мамиле жөнөкөй жана, негизинен, түшүнүктүү. Бирок анын кемчorктери бар: математикалык операцияларды аткаруудагы кыйынчылыктар. Мисалы, терс жана оң сандарды кошуу менен. Кошумча манипуляциялар жасалбаса, аларды бүктөөгө болбойт.

Кошумча code

Кошумча codeду колдонуу менен сиз түз codeдун кемчorктеринен качсаңыз болот. Сандын кошумча codeун алуу үчүн жөнөкөй алгоритм бар. Келгиле, -5 саны үчүн кошумча codeду алууга аракет кылалы. Келгиле, бул санды экorк сан системасында экинин толуктоочу codeун колдонуп көрсөтөлү. 1-кадам. Биз түз codeду колдонуу менен терс сандын өкүлчүлүгүн алабыз. -5 үчүн 10000101 болот. 2-кадам. Белги цифрасынан башка бардык сандарды инверттеңиз. Келгиле, бардык нөлдөрдү бирлерге, ал эми эң сол биттен башка бардык жерде нөлдөрдү нөлгө алмаштыралы.

10000101 => 11111010
3-кадам. Натыйжадагы мааниге бирди кошуңуз:

11111010 + 1 = 11111011
Даяр. Экөөнүн толуктоочу codeун колдонуп, экorк санауу системасында -5тин маанисин алдык. Бул төмөнкү материалды түшүнүү үчүн маанилүү, анткени Java терс сандарды биттерде сактоо үчүн экинин толуктоочу codeун колдонот.

Биттик операциялардын түрлөрү

Эми биз бардык киришүүлөрдү карап чыккандан кийин, Javaдагы биттик операциялар жөнүндө сүйлөшөлү. Бүтүн сандарда биттик операция аткарылат жана анын натыйжасы бүтүн сан болуп саналат. Бул процессте сан экorк системага которулат, ар бир битке операция жасалып, натыйжа кайра ондукка айланат. Операциялардын тизмеси төмөнкү tableда: Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 14Биз буга чейин билгенибиздей, сандарды биттердин жыйындысы катары көрсөтсө болот. Биттик операциялар мындай өкүлчүлүктүн так ар бир битине операцияларды аткарат. Алалы NOT, AND, OR, XOR. Эске салсак, биз жакында эле логикалык операнддар үчүн гана чындык tableларын караганбыз. Бул учурда бүтүн сандын ар бир битине бирдей операциялар колдонулат.

биттик бирдик оператор ЭМЕС ~

Бул оператор бардык нөлдөрдү бир, ал эми бардык нөлдөрдү нөлгө алмаштырат. Ондук системада 10 саны бар дейли. Бинардык системада бул сан 1010. Эгер бул санга унардык биттик жокко чыгаруу операторун колдонсок, биз төмөнкүдөй нерсени алабыз: Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 15Келгиле, анын Java codeунда кандай экенин карап көрөлү:
public static void main(String[] args) {
   int a = 10;

   System.out.println(" a = " + a + "; binary string: " + Integer.toBinaryString(a));
   System.out.println("~a = " + ~a + "; binary string: " + Integer.toBinaryString(~a));
}
Эми консолдо эмне көрсөтүлөрүн карап көрөлү:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 25
Биринчи сапта биз экorк санауу системасындагы маанини нөлсүз алдык. Биз аларды көрбөсөк да, алар бар. Муну бардык биттер тескери бөлүккө айландырган экинчи сызык далилдеп турат. Мына ушундан улам биз көптөгөн алдыңкы звенолорду көрүп жатабыз. Булар биринчи сапта басылганда компилятор тарабынан этибарга алынбаган мурунку алдыңкы нөлдөр. Бул жерде тактык үчүн алдыңкы нөлдөрдү көрсөткөн кичинекей программа.
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 26

Bitwise ЖАНА оператору

Бул оператор эки номерге тиешелүү. ANDАл ар бир сандын биттеринин ортосундагы операцияны аткарат . Мисалга карап көрөлү: Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 16Бул операция эки санда аткарылат. Java codeундагы мисал:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 28

Bitwise ЖЕ оператору

ЖЕ эки санга тиешелүү. Ал ар бир сандын биттеринин ортосунда ЖЕ операциясын аткарат: Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 17Эми бул IDEAда кандай болорун карап көрөлү:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 30

Биталдык операция, эксклюзивдүү ЖЕ (XOR)

Ошол эле мисалды карап көрөлү, бирок жаңы операция менен: Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 18Мисал code:
Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 32

Биталдык солго жылдыруу

Бул оператор эки операндга тиешелүү, башкача айтканда, операцияда x << yсандын биттери позицияларды солго xжылдырат . yБул эмнени билдирет? Операциянын мисалын карап көрөлү.Операциянын 10 << 1 Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 19жыйынтыгы ондук системадагы 20 саны болот. Жогорудагы диаграммадан көрүнүп тургандай, бардык биттер 1ге солго жылдырылат. Бул операция учурунда эң маанилүү биттин (эң сол бит) мааниси жоголот. Ал эми эң аз маанилүү бит (эң оң жактагы бит) нөл менен толтурулат. Бул операция тууралуу эмне айта аласыз?
  1. Сандын биттерин солго жылдыруу менен X, Nбиз санды X2 N көбөйтөбүз .

    Бул жерде бир мисал:

    Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 34
  2. Бирок! 1 мааниси бар бит эң сол жактагы позицияны алса, сандын белгиси өзгөрүшү мүмкүн.

  3. Эгер сиз солго чексиз жылдырсаңыз, сан жөн эле 0гө айланат. 2 жана 3-пункттарды көрсөтөлү:

    Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 35

Биталдык оңго жылдыруу

Бул оператор эки операндга тиешелүү. Ошол. операцияда x >> yсандын биттери позицияларын оңго xжылдырат . yДагы бир мисалды карап көрөлү. Келгиле, операцияны схемалык түрдө талдап көрөлү 10 >> 1. Келгиле, 10 санынын бардык биттерин бир позициядан оңго жылдыралы: Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 20Сменалык операция учурунда биз туура биттерди жоготобуз. Алар жөн эле жок болот. Эң сол бит сандын белгиси (0 оң, 1 терс). Демек, акыркы мааниде баштапкы сандагыдай эле жайгаштырылат. Терс сан менен мисал: Java операторлоруна киришүү: Логикалык, арифметикалык, биттик – 21Эң оң жактагы бит жоголуп, эң сол бит сандын ардактуу белгиси катары баштапкы сандан көчүрүлөт. Мунун баарын IDEAда кантип кылса болот? Негизи, татаал эч нерсе жок, жөн гана алып, жылдырыңыз:
Знакомство с операторами Java: логические, арифметические, побитовые - 38
Азыр. Оңго жылдырылган сандар жөнүндө эмне айта аласыз? Алар 2ге бөлүнөт. Бир битти оңго жылдырган сайын, баштапкы санды 2ге бөлөбүз. Эгерде сан 2ге бөлүнбөсө, натыйжа минус чексиздикке (төмөн) карай тегеректелет. Бирок бул биттерди так 1ге жылдырсак гана иштейт. Ал эми 2 битке болсо, 4кө бөлүңүз. 3 битке, 8ге бөлүңүз. 4 битке, 16га бөлүңүз. Көрдүңүзбү? X2нин даражасы... Санды бит менен оңго жылдырганда N, санды X2ге 2ге бөлөбүз N. Демонстрация:
public class BitOperationsDemo {

   public static void main(String[] args) {

    for (int i = 1; i <= 10; i++) {

        int shiftOperationResult = 2048 >> i;
        int devideOperationResult = 2048 / (int) Math.pow(2, i);


           System.out.println(shiftOperationResult + " - " + devideOperationResult);
    }

   }

}
Бул жерде эмне болуп жатат?
  1. i өзгөрмөсү 1ден 10го чейин көбөйтүлгөн цикл.

  2. Ар бир кайталоодо биз 2 маанини эсептейбиз:
    • shiftOperationResult2048 санын i битке оңго жылдыруунун жыйынтыгын өзгөрмөгө жазабыз;

    • devideOperationResult2048 санын i даражасына 2ге бөлүүнүн жыйынтыгын өзгөрмөгө жазабыз .

  3. Биз алынган эки маанини жупта көрсөтөбүз.

Программаны аткаруунун натыйжасы төмөнкүдөй: 1024 - 1024 512 - 512 256 - 256 128 - 128 64 - 64 32 - 32 16 - 16 8 - 8 4 - 4 2 - 2

Нөл толтуруу менен бит багыты боюнча оңго жылдыруу

Кадимки биттик оңго жылдыруу сандын белгисин сактаса (эң маанилүү бит өз маанисин сактап калат), нөлдү толтурган оңго жылдыруу андай эмес. Ал эми эң маанилүү бит нөл менен толтурулат. Келгиле, анын кандай экенин карап көрөлү: Знакомство с операторами Java: логические, арифметические, побитовые - 22

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

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

Колдонуунун пайдалуу мисалдары

Сандын паритетин аныктоо

Знакомство с операторами Java: логические, арифметические, побитовые - 24

Массивдеги максималдуу элементти табуу

Знакомство с операторами Java: логические, арифметические, побитовые - 25Минималдуу элементти табуу үчүн жөн гана туура жерде салыштыруу белгисин өзгөртүңүз.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION