Java тіліндегі операцияларға тоқталайық: сандық, логикалық, биттік. Бұл бағдарламалауды үйрену үшін міндетті түрде қажет теориялық негіз.
Кесте 1. Екілік арифметикалық операторлар
Алғашқы төрт оператор ешқандай сұрақ қоймауы керек: бәрі математикадағыдай. Соңғы оператор, бөлімнің қалған бөлігі де тым күрделі ештеңе жасамайды. Мысалы, 24-ті 7-ге бөлсек, 3 бүтін сан және 3 қалдық шығады. Бұл оператор қайтаратын қалғаны:
Екілік операторлардан басқа Java-да унарлық арифметикалық операторлар бар.
Кесте 2. Бірлік арифметикалық операторлар:
Бірыңғай плюс пен минустың мысалы:
Көбейту және азайту операциялары негізінен қарапайым. Бірінші жағдайда айнымалы 1-ге артады, екіншісінде айнымалы 1-ге азаяды. Төмендегі мысал:
Кесте 3. Көбейту-азайту операторлары:
Демонстрация:
Арифметикадан басқа (екі саннан) салыстыру амалдары бар. Нәтиже әрқашан ақиқат немесе жалған болады ( true / false ).
Кесте 4. Салыстыру операторлары
Мысалдар:
Кесте 5. Терістеу операторы ақиқат кестесі (ЕМЕС)
Кесте 6. Конъюнкция операторының ақиқат кестесі (ЖӘНЕ)
Кесте 7. Disjunction операторының ақиқат кестесі (OR)
Кесте 8. Модульдерді қосу операторының ақиқат кестесі (XOR)
Java-да бірдей логикалық операциялар бар:
Және
Енді бізде стенографиялық операторлар (
Кейде өрнектің нәтижесін бірінші операндтан есептеуге болады. Бұл қысқартылған операторларды
Стенографиялық операторлар жағдайында өрнектің екінші бөлігі бағаланбайды. Бірақ бұл өрнектің нәтижесі бірінші операндтан анық болған кезде ғана болады.
Ондық және екілік санау жүйесінде 0-ден 15-ке дейін санауды көрсетейік:
Көріп отырғаныңыздай, бәрі соншалықты күрделі емес. Биттерден басқа, ақпараттың басқа да таныс бірліктері бар - byte , килоbyte , мегаbyte , гигаbyte және т.б. Сіз 1 byteта 8 бит бар екенін білетін шығарсыз . Бұл нені білдіреді? Бұл қатардағы 8 бит 1 byteты алады дегенді білдіреді. Міне, byteтардың қандай болуы мүмкін екендігінің мысалдары:
Voila - бұл соншалықты күрделі емес. Бірақ бәрібір, бір нәрсені нақтылау керек.
Мысал ретінде 8 биттік санды қолданып қарастырайық:
Тәсіл қарапайым және, негізінен, түсінікті. Дегенмен, оның кемшіліктері бар: математикалық амалдарды орындаудағы қиындықтар. Мысалы, теріс және оң сандарды қосу арқылы. Қосымша манипуляциялар жасалмайынша, оларды бүктеу мүмкін емес.
Бірінші жолда біз екілік санау жүйесінде алдыңғы нөлдерсіз мәнді алдық. Біз оларды көрмесек те, олар бар. Бұл барлық биттердің кері биттерге айналдырылған екінші жолымен дәлелденеді. Сондықтан біз көптеген жетекші бірліктерді көреміз. Бұл бірінші жолда басып шығару кезінде компилятор еленбеген бұрынғы жетекші нөлдер. Міне, түсінікті болу үшін алдыңғы нөлдерді көрсететін шағын бағдарлама.
Қазір. Оңға жылжытылған сандар туралы не айта аласыз? Олар 2-ге бөлінеді. Бір бит оңға жылжытқан сайын бастапқы санды 2-ге бөлеміз. Егер сан 2-ге бөлінбесе, нәтиже минус шексіздікке (төмен) қарай дөңгелектенеді. Бірақ бұл биттерді дәл 1-ге ауыстырсақ қана жұмыс істейді. Ал егер 2 битке болса, 4-ке бөліңіз. 3 битке бөліңіз, 8-ге бөліңіз. 4 битке, 16-ға бөліңіз. Көрдіңіз бе?
- Java тіліндегі операторлардың қандай түрлері бар?
- JavaRush курсындағы Java операторлары
- Java тіліндегі сандық операциялар
- Java тіліндегі логикалық операциялар
- Java тіліндегі биттік операциялар
- Java тіліндегі операциялардың басымдылығы
- Қолданудың пайдалы мысалдары
Java тіліндегі операторлардың қандай түрлері бар?
Кез келген операция үшін бізге кем дегенде екі нәрсе қажет:- оператор;
- операнд.
JavaRush курсындағы Java операторлары
Бірнеше дәрістер бірінші квесттің төртінші деңгейіндегі Java операторларына арналған - Java синтаксисі. Атап айтқанда, логикалық сияқты шартты операторлар . Курста салыстыру операторларының, шартты операторлардың және логикалық операторлардың жұмысын түсінуге көмектесетін 22 тапсырма бар.Java тіліндегі сандық операциялар
Бағдарламашылар сандармен орындайтын ең көп таралған операция айнымалыға сандық мән беру болып табылады. Ол, оператор сияқты,=
сізге таныс:
int a = 1;
int b = 2;
int c = 3;
Сонымен қатар арифметикалық амалдар бар. Олар екілік арифметикалық операторлардың көмегімен орындалады:
System.out.println(24 % 7); // prints 3
Мұнда Oracle құжаттамасының ресми сайтындағы мысалдар берілген: Бұл бағдарлама келесіні шығарады: 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
Бұл операциялардың екі түрі бар - постфикс және префикс. Бірінші жағдайда оператор айнымалыдан кейін, екінші жағдайда айнымалыдан бұрын жазылады. Жалғыз айырмашылық - арттыру немесе азайту операциясы орындалған кезде. Төмендегі кестеде мысал және сипаттама. Бізде айнымалы бар делік:
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 тіліндегі логикалық операциялар
Олардың әрқайсысының логикалық амалдары мен ақиқат кестелерін қарастырайық:- терістеу операциясы (
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();
}
}
Бұл бағдарлама көрсетеді: МЫСАЛ ЕМЕС: Өтірік ЕМЕС = ақиқат ЕМЕС = жалған ЖӘНЕ МЫСАЛ: жалған ЖӘНЕ жалған = жалған жалған ЖӘНЕ шынайы = жалған ақиқат ЖӘНЕ жалған = жалған ақиқат ЖӘНЕ шын = шын НЕМЕСЕ МЫСАЛ: жалған НЕМЕСЕ жалған = жалған НЕМЕСЕ шын = шын ақиқат НЕМЕСЕ жалған = ақиқат шын НЕМЕСЕ ақиқат = шын XOR МЫСАЛ: жалған XOR жалған = жалған жалған XOR ақиқат = ақиқат XOR жалған = шын шын XOR шын = жалған Логикалық операторлар тек айнымалыларға қолданылады boolean
. Біздің жағдайда біз оларды тікелей мәндерге қолдандық, бірақ сіз оларды айнымалылармен де пайдалана аласыз boolean
:
boolean
өрнектерге:
&&
, ||
) және ұқсас разрядтық операторлар ( &
, |
) бар. Олардың арасындағы айырмашылық неде? Біріншіден, разрядты бүтін сандарға қолдануға болады. Бұл туралы сәл кейінірек айтатын боламыз. Екіншіден, кейбіреулері қысқартылған, ал басқалары жоқ. Аббревиатураның қандай екенін түсіну үшін өрнекті қарастырайық:
false AND x = ?
true OR x = ?
Бұл x
кез келген логикалық мәнді қабылдай алады. Ал жалпы логика заңдары мен ақиқат кестелері бойынша оның x
ақиқат немесе жалған болуына қарамастан , бірінші өрнектің нәтижесі жалған , ал екіншісінің нәтижесі ақиқат болады . Қараңыз.
&&
және ||
. Жоғарыда сипатталғанға ұқсас өрнектерде олар екінші операндтың мәнін бағаламайды. Міне, шағын мысал:
Java тіліндегі биттік операциялар
Міне, біз ең қызықты бөлікке келдік: разрядтық операциялар. Аты айтып тұрғандай, бұл биттермен орындалатын операциялар. Бірақ бұл тақырыпқа кіріспес бұрын, байланысты салалар туралы айту керек.Сандарды екілік санау жүйесінде көрсету
Сандар, бағдарламадағы кез келген басқа ақпарат сияқты, компьютер жадында екілік codeта сақталады. Екілік code – нөлдер мен бірліктердің жиыны. Әрбір нөл немесе бір бит деп аталатын ақпарат бірлігін білдіреді.Википедияға сәйкес:
Бит (ағылшын тілінен екілік digit – екілік сан; сонымен қатар сөз ойыны: ағылшынша bit – бөлік, бөлшек) – ақпарат көлемін өлшеу бірлігі. 1 бит ақпарат екі мағынаға ие болуы мүмкін таңба немесе сигнал: қосулы немесе өшірулі, иә немесе жоқ, жоғары немесе төмен, зарядталған немесе зарядсыз; екілік жүйеде ол 1 (бір) немесе 0 (нөл) болады.Битті операторлар қандай деректермен жұмыс істейді?
Java тіліндегі разрядтық операциялар тек бүтін сандарда орындалады. Бүтін сандар компьютер жадында разрядтар жиыны ретінде сақталады. Компьютер кез келген ақпаратты екілік санау жүйесіне (биттер жиынына) түрлендіреді, содан кейін ғана онымен әрекеттеседі деп айта аламыз. Бірақ екілік санау жүйесі қалай жұмыс істейді? Ондық санау жүйесінде бізде бар болғаны 10 символ бар: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Санау үшін осы таңбаларды қолданамыз. 9-дан кейін - 10, 19-дан кейін - 20, 99-дан кейін - 100, 749-дан кейін - 750. Яғни, біз қол жетімді 10 таңбаның комбинациясын пайдаланамыз және оларды “нөлден түскі асқа дейін” санау үшін пайдалана аламыз. Екілік санау жүйесінде он таңбаның орнына екеуі ғана - 0, 1. Бірақ бұл белгілерді ондық жүйедегідей принцип бойынша біріктіру арқылы біз шексіз санай аламыз.
00000000 - 1 byte
10110010 - 1 byte
01011011 - 1 byte
Бір 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
ең кішісі ретінде берілген. Төмендегі кестеде барлық Java бүтін түрлері және олар алатын жад кеңістігі көрсетілген: түрін қарастырыңыз int
. Ол 2147483648 теріс мәндерді, 2147483647 оң мәндерді және бір нөлді сақтай алады. Барлығы:
2147483648 + 2147483647 + 1 = 4294967296.
Бұл тип компьютер жадында 32 битті алады. 32 нөлдер мен бірліктер жиынтығынан мүмкін болатын комбинациялар саны:
232 = 4294967296.
Түр ұстай алатын мәндер санымен бірдей сан int
. Бұл деректер түрінің мәндерінің ауқымы мен оның өлшемі (жадтағы биттердің саны) арасындағы байланыстың демонстрациясы ғана. Java тіліндегі кез келген түрдегі кез келген санды екілік жүйеге түрлендіруге болады. Мұны Java тілін пайдалану арқылы қаншалықты оңай жасауға болатынын көрейік. Біз типтің мысалынан үйренеміз int
. Бұл түрдің өз орауыш класы бар - Integer
. toBinaryString
Оның біз үшін барлық жұмысты жасайтын біреуі бар :
int
саны 32 бит алады. Бірақ жоғарыдағы мысалдағы 10 санын басып шығарғанда, консольде 1010-ды көреміз.Себебі, алдыңғы нөлдер басып шығарылмайды. Егер олар көрсетілсе, 1010 орнына біз консольде 000000000000000000000000000001010 көретін едік. Бірақ қабылдауға ыңғайлы болу үшін барлық алдыңғы нөлдер алынып тасталды. Сіз өзіңізден сұрамайынша қиын емес: теріс сандар туралы не деуге болады? Ол ақпаратты тек екілік жүйеде қабылдайды. Минус белгісін де екілік codeта жазу керек екен. Мұны тікелей немесе қосымша code арқылы жасауға болады.
Тікелей code
Екілік санау жүйесінде сандарды көрсету әдісі, онда ең маңызды бит (ең сол жақ бит) санның таңбасына бөлінеді. Егер сан оң болса, сол жақ бит 0, теріс болса - 1 деп жазылады.Қосымша code
Қосымша codeты пайдалану арқылы сіз тікелей codeтың кемшіліктерінен аулақ бола аласыз. Санның қосымша codeын алудың қарапайым алгоритмі бар. -5 санының қосымша codeын алуға тырысайық. Бұл санды екілік санау жүйесінде екінің толықтауыш codeын пайдаланып көрсетейік. 1-қадам. Тікелей codeты пайдаланып теріс санның көрінісін аламыз. -5 үшін ол 10000101 болады. 2-қадам. Таңба цифрынан басқа барлық сандарды ауыстырыңыз. Барлық нөлдерді бірліктермен, ал ең сол жақ биттен басқа барлық жерде нөлдермен ауыстырайық.
10000101 => 11111010
3-қадам. Алынған мәнге біреуін қосыңыз:
11111010 + 1 = 11111011
Дайын. Екілік санау жүйесінде екінің толықтауыш codeын пайдаланып -5 мәнін алдық. Бұл келесі материалды түсіну үшін маңызды, өйткені Java теріс сандарды биттерде сақтау үшін екінің толықтыру codeын пайдаланады.
Битті операциялардың түрлері
Енді біз барлық кіріспелерді қарастырдық, енді Java тіліндегі биттік операциялар туралы сөйлесейік. Бүтін сандарға разрядтық операция орындалады және оның нәтижесі бүтін сан болады. Процесс барысында сан екілік жүйеге түрлендіріледі, әрбір битке операция орындалады және нәтиже ондық жүйеге қайта түрленеді. Операциялар тізімі төмендегі кестеде берілген: Біз бұрыннан белгілі болғандай, сандарды биттердің жиынтығы ретінде көрсетуге болады. Биттік операциялар дәл осындай көріністің әрбір биті бойынша операцияларды орындайды.NOT
, AND
, OR
, алайық XOR
. Еске салайық, біз жақында ғана логикалық операндтар үшін ақиқат кестелерін қарастырдық. Бұл жағдайда бүтін санның әрбір битіне бірдей операциялар қолданылады.
Биттік унарлы оператор NOT ~
Бұл оператор барлық нөлдерді бір, ал барлық нөлдерді нөлге ауыстырады. Ондық жүйеде 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));
}
Енді консольде не көрсетілетінін көрейік:
Биттік ЖӘНЕ операторы
Бұл оператор екі санға қолданылады.AND
Ол әрбір санның разрядтары арасындағы операцияны орындайды . Мысал қарастырайық: Бұл операция екі санға орындалады. Java codeындағы мысал:
Биттік НЕМЕСЕ операторы
OR екі санға қолданылады. Ол әрбір санның биттері арасында НЕМЕСЕ операциясын орындайды: Енді оның IDEA-да қандай болатынын қарастырайық:Биттік операция, эксклюзивті НЕМЕСЕ (XOR)
Сол мысалды қарастырайық, бірақ жаңа операциямен: Мысал codeы:Солға биттік жылжу
Бұл оператор екі операндқа қолданылады, яғни операциядаx << y
санның биттері позицияларды солға x
ауыстырады . y
Бұл нені білдіреді? Операцияның мысалын қарастырайық.Операцияның 10 << 1
нәтижесі ондық жүйеде 20 саны болады. Жоғарыдағы диаграммадан көріп отырғаныңыздай, барлық разрядтар 1-ге солға жылжытылады. Бұл әрекет кезінде ең маңызды биттің (ең сол жақ бит) мәні жоғалады. Ал ең аз маңызды бит (ең оң жақ бит) нөлмен толтырылады. Бұл операция туралы не айта аласыз?
-
Санның биттерін солға битке жылжыту арқылы біз санды
X
2 N көбейтеміз .N
X
Міне, мысал:
-
Бірақ! 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
i дәрежесіне 2048 санын 2-ге бөлу нәтижесін айнымалыға жазамыз . -
Алынған екі мәнді жұппен көрсетеміз.
GO TO FULL VERSION