Келгиле, Java тorндеги операциялар жөнүндө сүйлөшөлү: сандык, логикалык, биттик. Бул программалоону үйрөнүү үчүн сөзсүз керек болгон теориялык негиз.
Таблица 1. Бинарлык арифметикалык операторлор
Биринчи төрт оператор эч кандай суроо бербеши керек: баары математикадагыдай. Акыркы оператор, бөлүмдүн калган бөлүгү да өтө татаал эч нерсе жасаbyte. Мисалы, 24тү 7ге бөлсөк, 3 бүтүн сан жана 3 калдык алабыз. Бул оператор кайтарып бере турган калган:
Java экorк операторлордон тышкары унардык арифметикалык операторлорго ээ.
Таблица 2. Бирдиктүү арифметикалык операторлор:
Бирдиктүү плюс менен минустын мисалы:
Көбөйтүү жана азайтуу операциялары негизинен жөнөкөй. Биринчи учурда өзгөрмө 1ге көбөйтүлөт, экинчисинде өзгөрмө 1ге азаят. Мисал төмөндө:
Таблица 3. Көбөйтүү-кемитүү операторлору:
Демонстрация:
Арифметикадан тышкары, салыштыруу амалдары (эки сандын) бар. Натыйжа ар дайым чын же жалган болот ( чын / жалган ).
Таблица 4. Салыштыруу операторлору
Мисалдар:
Таблица 5. Жок кылуу оператору Чындык tableсы (ЭМЕС)
Таблица 6. Конъюнктура операторунун чындык tableсы (ЖАНА)
Таблица 7. Disjunction операторунун чындык tableсы (OR)
Таблица 8. Модулдук кошуу операторунун чындык tableсы (XOR)
Java бирдей логикалык операцияларга ээ:
Жана
Эми бизде стенографиялык операторлор (
Кээде туюнтуунун натыйжасын биринчи операнддан эсептөөгө болот. Бул кыскартылган операторлорду
Стенографиялык операторлордо туюнтумдун экинчи бөлүгү бааланbyte. Бирок бул туюнтуунун натыйжасы биринчи операнддан эле көрүнүп турганда гана болот.
Ондук жана экorк системада 0дөн 15ке чейин санаганды көрсөтөлү:
Көрүнүп тургандай, баары ушунчалык татаал эмес. Биттерден тышкары, башка тааныш маалымат бирдиктери бар - byte , килоbyte , мегаbyte , гигаbyte ж.б. Сиз 1 byteта 8 бит бар экенин билсеңиз керек . Бул эмнени билдирет? Бул катардагы 8 бит 1 byteты ээлейт дегенди билдирет. Бул жерде byte болушу мүмкүн болгон мисалдар:
Voila - бул татаал эмес. Бирок дагы эле бир нерсени такташ керек.
Мисал катары 8 биттик санды колдонуп муну карап көрөлү:
мамиле жөнөкөй жана, негизинен, түшүнүктүү. Бирок анын кемчorктери бар: математикалык операцияларды аткаруудагы кыйынчылыктар. Мисалы, терс жана оң сандарды кошуу менен. Кошумча манипуляциялар жасалбаса, аларды бүктөөгө болбойт.
Биринчи сапта биз экorк санауу системасындагы маанини нөлсүз алдык. Биз аларды көрбөсөк да, алар бар. Муну бардык биттер тескери бөлүккө айландырган экинчи сызык далилдеп турат. Мына ушундан улам биз көптөгөн алдыңкы звенолорду көрүп жатабыз. Булар биринчи сапта басылганда компилятор тарабынан этибарга алынбаган мурунку алдыңкы нөлдөр. Бул жерде тактык үчүн алдыңкы нөлдөрдү көрсөткөн кичинекей программа.
Азыр. Оңго жылдырылган сандар жөнүндө эмне айта аласыз? Алар 2ге бөлүнөт. Бир битти оңго жылдырган сайын, баштапкы санды 2ге бөлөбүз. Эгерде сан 2ге бөлүнбөсө, натыйжа минус чексиздикке (төмөн) карай тегеректелет. Бирок бул биттерди так 1ге жылдырсак гана иштейт. Ал эми 2 битке болсо, 4кө бөлүңүз. 3 битке, 8ге бөлүңүз. 4 битке, 16га бөлүңүз. Көрдүңүзбү?
- Javaдагы операторлордун кандай түрлөрү бар?
- JavaRush курсундагы Java операторлору
- Java тorндеги сандар операциялары
- Java тorндеги логикалык операциялар
- Javaдагы биттик операциялар
- Java тorндеги операциялардын артыкчылыгы
- Колдонуунун пайдалуу мисалдары
Javaдагы операторлордун кандай түрлөрү бар?
Кандайдыр бир операция үчүн бизге жок дегенде эки нерсе керек:- оператор;
- операнд.
JavaRush курсундагы Java операторлору
Бир нече лекциялар биринчи квесттин төртүнчү деңгээлинде Java операторлоруна арналган - Java Синтаксиси. Атап айтканда, логикалык сыяктуу шарттуу операторлор . Курста салыштыруу операторлорунун, шарттуу операторлордун жана логикалык операторлордун иштерин түшүнүүгө жардам бере турган 22 тапшырма бар.Java тorндеги сандар операциялары
Программисттердин сандарда аткарган эң кеңири тараган операциясы өзгөрмөгө сандык маани берүү. Ал, оператор сыяктуу,=
сизге тааныш:
int a = 1;
int b = 2;
int c = 3;
Арифметикалык амалдар да бар. Алар бинардык арифметикалык операторлор аркылуу ишке ашырылат:
System.out.println(24 % 7); // prints 3
Бул жерде Oracle documentациясынын расмий сайтынан мисалдар келтирилген: Бул программа төмөнкүлөрдү чыгарат: 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;
Келгиле, акыркы мисал кантип иштээрин көрсөтөлү:
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);
int x = 9;
x++;
System.out.println(x); // 10
int y = 21;
y--;
System.out.println(y); // 20
Бул операциялардын эки түрү бар - постфикс жана префикс. Биринчи учурда оператор өзгөрмөдөн кийин, экинчисинде өзгөрмөнүн алдына жазылат. Бир гана айырма - көбөйтүү же азайтуу операциясы аткарылганда. Төмөнкү tableда мисал жана сүрөттөлүшү. Бизде өзгөрмө бар дейли:
int a = 2;
Анда:
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 тorндеги логикалык операциялар
Келгиле, алардын ар биринин логикалык амалдарын жана чындык tableларын карап көрөлү:- жокко чыгаруу операциясы (
NOT
); - конъюнктура операциясы, логикалык ЖАНА (
AND
); - дизъюнкция операциясы, логикалык ЖЕ (
OR
); - модулдук кошуу операциясы, өзгөчө ЖЕ (
XOR
).
!
— жокко чыгаруу оператору;&&
— логикалык ЖАНА оператору (кыскача);||
— логикалык ЖЕ оператору (кыскача);&
— биттик ЖАНА оператору;|
— биттик ЖЕ оператору;^
— биттик эксклюзивдүү ЖЕ оператор.
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
өзгөрмөлөр менен да колдоно аласыз:
boolean
туюнтмаларга:
&&
, ||
) жана окшош биттик операторлор ( &
, |
) бар. Алардын ортосунда кандай айырма бар? Биринчиден, бүтүн сандарга бит боюнча колдонулушу мүмкүн. Бул тууралуу бир аздан кийин сүйлөшөбүз. Экинчиден, кээ бирлери кыскартылган, ал эми башкалары жок. Аббревиатура кандай экенин түшүнүү үчүн, келгиле, сөз айкашын карап көрөлү:
false AND x = ?
true OR x = ?
Бул x
каалаган логикалык маанини ала алат. Ал эми жалпысынан логиканын жана чындык tableларынын мыйзамдарына ылайык, анын x
чын же жалган экендигине карабастан , биринчи туюнтуунун натыйжасы жалган , экинчисинин натыйжасы туура болот . Кара.
&&
жана ||
. Жогоруда айтылгандарга окшош туюнтмаларда алар экинчи операнддын маанисин баала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. Бирок бул символдорду ондук системадагыдай принцип боюнча бириктирип, чексиз санай алабыз.
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 түрдүү маанини сактай алат. Ал эми бир типтеги сан byte
256 ар кандай маанилерди ала алат (128 терс, 127 оң жана 1 нөл). Ар бир сандын мааниси byte
сегиз биттен турган уникалдуу топтомго ээ. Бул түрү гана эмес byte
, бардык интегралдык түрлөрү үчүн. Түрү byte
эң кичинеси катары мисал катары берилген. Төмөнкү table Java бүтүн сан түрлөрүн жана алар ээлеген эс мейкиндигин көрсөтөт: түрүн карап көрөлү int
. Ал 2147483648 терс маанилерди, 2147483647 оң маанилерди жана бир нөлдү сактай алат. Бардыгы:
2147483648 + 2147483647 + 1 = 4294967296.
Бул тип компьютердин эсинде 32 битти ээлейт. 32 нөл жана бир топтомунан мүмкүн болгон комбинациялардын саны:
232 = 4294967296.
Түрү кармай турган маанилердин саны менен бирдей сан int
. Бул жөн гана маалымат түрүнүн маанилеринин диапазону менен анын өлчөмүнүн (эсте турган биттердин саны) ортосундагы мамиленин демонстрациясы. Javaдагы каалаган санды экorкке айландырууга болот. Келгиле, муну Java тorн колдонуу менен канчалык оңой жасоого болорун карап көрөлү. Биз типтеги мисалдан үйрөнөбүз int
. Бул түрдүн өзүнүн таңгыч классы бар - Integer
. Анын toBinaryString
биз үчүн бардык ишти жасай турган бирөө бар:
int
саны 32 бит алат. Бирок жогорудагы мисалдагы 10 санын басып чыгарганда, консолдо 1010ду көрөбүз.Анткени алдыңкы нөлдөр басылbyte. Эгерде алар көрсөтүлсө, анда 1010дун ордуна биз консолдо 000000000000000000000000000001010 көрмөкпүз. Бирок кабыл алуу оңой болушу үчүн бардык алдыңкы нөлдөр алынып салынган. Өзүңө суроо бермейинче кыйын эмес: терс сандар жөнүндө эмне айтууга болот? Ал маалыматты экorк системада гана кабыл алат. Көрсө, минус белгисин да экorк code менен жазуу керек экен. Бул түз же кошумча codeдун жардамы менен жасалышы мүмкүн.
Түз code
Эң маанилүү бит (эң сол бит) сандын белгисине бөлүнгөн экorк санауу системасында сандарды көрсөтүү ыкмасы. Эгерде сан оң болсо, эң сол бит 0, терс болсо - 1 деп жазылат.Кошумча 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да: Биз буга чейин билгенибиздей, сандарды биттердин жыйындысы катары көрсөтсө болот. Биттик операциялар мындай өкүлчүлүктүн так ар бир битине операцияларды аткарат. АлалыNOT
, AND
, OR
, XOR
. Эске салсак, биз жакында эле логикалык операнддар үчүн гана чындык tableларын караганбыз. Бул учурда бүтүн сандын ар бир битине бирдей операциялар колдонулат.
биттик бирдик оператор ЭМЕС ~
Бул оператор бардык нөлдөрдү бир, ал эми бардык нөлдөрдү нөлгө алмаштырат. Ондук системада 10 саны бар дейли. Бинардык системада бул сан 1010. Эгер бул санга унардык биттик жокко чыгаруу операторун колдонсок, биз төмөнкүдөй нерсени алабыз: Келгиле, анын 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));
}
Эми консолдо эмне көрсөтүлөрүн карап көрөлү:
Bitwise ЖАНА оператору
Бул оператор эки номерге тиешелүү.AND
Ал ар бир сандын биттеринин ортосундагы операцияны аткарат . Мисалга карап көрөлү: Бул операция эки санда аткарылат. Java codeундагы мисал:
Bitwise ЖЕ оператору
ЖЕ эки санга тиешелүү. Ал ар бир сандын биттеринин ортосунда ЖЕ операциясын аткарат: Эми бул IDEAда кандай болорун карап көрөлү:Биталдык операция, эксклюзивдүү ЖЕ (XOR)
Ошол эле мисалды карап көрөлү, бирок жаңы операция менен: Мисал code:Биталдык солго жылдыруу
Бул оператор эки операндга тиешелүү, башкача айтканда, операциядаx << y
сандын биттери позицияларды солго x
жылдырат . y
Бул эмнени билдирет? Операциянын мисалын карап көрөлү.Операциянын 10 << 1
жыйынтыгы ондук системадагы 20 саны болот. Жогорудагы диаграммадан көрүнүп тургандай, бардык биттер 1ге солго жылдырылат. Бул операция учурунда эң маанилүү биттин (эң сол бит) мааниси жоголот. Ал эми эң аз маанилүү бит (эң оң жактагы бит) нөл менен толтурулат. Бул операция тууралуу эмне айта аласыз?
-
Сандын биттерин солго жылдыруу менен
X
,N
биз сандыX
2 N көбөйтөбүз .Бул жерде бир мисал:
-
Бирок! 1 мааниси бар бит эң сол жактагы позицияны алса, сандын белгиси өзгөрүшү мүмкүн.
-
Эгер сиз солго чексиз жылдырсаңыз, сан жөн эле 0гө айланат. 2 жана 3-пункттарды көрсөтөлү:
Биталдык оңго жылдыруу
Бул оператор эки операндга тиешелүү. Ошол. операциядаx >> y
сандын биттери позицияларын оңго x
жылдырат . y
Дагы бир мисалды карап көрөлү. Келгиле, операцияны схемалык түрдө талдап көрөлү 10 >> 1
. Келгиле, 10 санынын бардык биттерин бир позициядан оңго жылдыралы: Сменалык операция учурунда биз туура биттерди жоготобуз. Алар жөн эле жок болот. Эң сол бит сандын белгиси (0 оң, 1 терс). Демек, акыркы мааниде баштапкы сандагыдай эле жайгаштырылат. Терс сан менен мисал: Эң оң жактагы бит жоголуп, эң сол бит сандын ардактуу белгиси катары баштапкы сандан көчүрүлөт. Мунун баарын IDEAда кантип кылса болот? Негизи, татаал эч нерсе жок, жөн гана алып, жылдырыңыз:
X
2нин даражасы... Санды бит менен оңго жылдырганда N
, санды X
2ге 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);
}
}
}
Бул жерде эмне болуп жатат?
-
i өзгөрмөсү 1ден 10го чейин көбөйтүлгөн цикл.
- Ар бир кайталоодо биз 2 маанини эсептейбиз:
-
shiftOperationResult
2048 санын i битке оңго жылдыруунун жыйынтыгын өзгөрмөгө жазабыз; -
devideOperationResult
2048 санын i даражасына 2ге бөлүүнүн жыйынтыгын өзгөрмөгө жазабыз . -
Биз алынган эки маанини жупта көрсөтөбүз.
GO TO FULL VERSION