JavaRush /Java блогы /Random-KK /Java операторларына кіріспе: логикалық, арифметикалық, би...

Java операторларына кіріспе: логикалық, арифметикалық, биттік

Топта жарияланған
Java тіліндегі операцияларға тоқталайық: сандық, логикалық, биттік. Бұл бағдарламалауды үйрену үшін міндетті түрде қажет теориялық негіз. Java операторларына кіріспе: логикалық, арифметикалық, биттік – 1

Java тіліндегі операторлардың қандай түрлері бар?

Кез келген операция үшін бізге кем дегенде екі нәрсе қажет:
  • оператор;
  • операнд.
Оператордың мысалы екі санды қосу операциясында қарапайым плюс болады. Ал бір-біріне қосылатын сандар бұл жағдайда операндтар болады. Сонымен, операторлардың көмегімен бір немесе бірнеше операндтарға амалдар орындаймыз. Екі операндқа амалдарды орындайтын операторлар екілік деп аталады. Мысалы, екі санды қосу. Бір операнд бойынша операцияларды орындайтын операторлар унарлы деп аталады. Мысалы, біртұтас минус.

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

Бірнеше дәрістер бірінші квесттің төртінші деңгейіндегі Java операторларына арналған - Java синтаксисі. Атап айтқанда, логикалық сияқты шартты операторлар . Курста салыстыру операторларының, шартты операторлардың және логикалық операторлардың жұмысын түсінуге көмектесетін 22 тапсырма бар.

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

Бағдарламашылар сандармен орындайтын ең көп таралған операция айнымалыға сандық мән беру болып табылады. Ол, оператор сияқты, =сізге таныс:
int a = 1;
int b = 2;
int c = 3;
Сонымен қатар арифметикалық амалдар бар. Олар екілік арифметикалық операторлардың көмегімен орындалады:
Кесте 1. Екілік арифметикалық операторлар
Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 2Алғашқы төрт оператор ешқандай сұрақ қоймауы керек: бәрі математикадағыдай. Соңғы оператор, бөлімнің қалған бөлігі де тым күрделі ештеңе жасамайды. Мысалы, 24-ті 7-ге бөлсек, 3 бүтін сан және 3 қалдық шығады. Бұл оператор қайтаратын қалғаны:
System.out.println(24 % 7); // prints 3
Мұнда Oracle құжаттамасының ресми сайтындағы мысалдар берілген: 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-да унарлық арифметикалық операторлар бар.
Кесте 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
Бұл операциялардың екі түрі бар - постфикс және префикс. Бірінші жағдайда оператор айнымалыдан кейін, екінші жағдайда айнымалыдан бұрын жазылады. Жалғыз айырмашылық - арттыру немесе азайту операциясы орындалған кезде. Төмендегі кестеде мысал және сипаттама. Бізде айнымалы бар делік:
int a = 2;
Содан кейін:
Кесте 3. Көбейту-азайту операторлары:
Java операторларына кіріспе: логикалық, арифметикалық, разрядтық – 5Демонстрация:
Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 8
Арифметикадан басқа (екі саннан) салыстыру амалдары бар. Нәтиже әрқашан ақиқат немесе жалған болады ( true / false ).
Кесте 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 тіліндегі логикалық операциялар

Олардың әрқайсысының логикалық амалдары мен ақиқат кестелерін қарастырайық:
  • терістеу операциясы ( NOT);
  • конъюнкция операциясы, логикалық ЖӘНЕ ( AND);
  • дизъюнкция операциясы, логикалық НЕМЕСЕ ( OR);
  • модульді қосу операциясы, ерекше НЕМЕСЕ ( XOR).
Терістеу операторы біртұтас және бір операндқа қолданылады. Барлық қалған операциялар екілік болып табылады. Осы амалдардың ақиқат кестелерін қарастырайық. Мұнда 0 Java тіліндегі false мәнінің баламасы , ал 1 - true эквиваленті .
Кесте 5. Терістеу операторы ақиқат кестесі (ЕМЕС)
Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 7
Кесте 6. Конъюнкция операторының ақиқат кестесі (ЖӘНЕ)
Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 8
Кесте 7. Disjunction операторының ақиқат кестесі (OR)
Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 9
Кесте 8. Модульдерді қосу операторының ақиқат кестесі (XOR)
Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 10Java-да бірдей логикалық операциялар бар:
  • !— терістеу операторы;
  • &&— логикалық ЖӘНЕ операторы (қысқаша);
  • ||— логикалық НЕМЕСЕ операторы (қысқа);
  • &— разрядтық ЖӘНЕ операторы;
  • |— разрядтық НЕМЕСЕ операторы;
  • ^— биттік эксклюзивті НЕМЕСЕ операторы.
Барлық ақиқат кестелерін 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();
   }
}
Бұл бағдарлама көрсетеді: МЫСАЛ ЕМЕС: Өтірік ЕМЕС = ақиқат ЕМЕС = жалған ЖӘНЕ МЫСАЛ: жалған ЖӘНЕ жалған = жалған жалған ЖӘНЕ шынайы = жалған ақиқат ЖӘНЕ жалған = жалған ақиқат ЖӘНЕ шын = шын НЕМЕСЕ МЫСАЛ: жалған НЕМЕСЕ жалған = жалған НЕМЕСЕ шын = шын ақиқат НЕМЕСЕ жалған = ақиқат шын НЕМЕСЕ ақиқат = шын XOR МЫСАЛ: жалған XOR жалған = жалған жалған XOR ақиқат = ақиқат XOR жалған = шын шын XOR шын = жалған Логикалық операторлар тек айнымалыларға қолданылады boolean. Біздің жағдайда біз оларды тікелей мәндерге қолдандық, бірақ сіз оларды айнымалылармен де пайдалана аласыз boolean:
Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 15
Және booleanөрнектерге:
Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 16
Енді бізде стенографиялық операторлар ( &&, ||) және ұқсас разрядтық операторлар ( &, |) бар. Олардың арасындағы айырмашылық неде? Біріншіден, разрядты бүтін сандарға қолдануға болады. Бұл туралы сәл кейінірек айтатын боламыз. Екіншіден, кейбіреулері қысқартылған, ал басқалары жоқ. Аббревиатураның қандай екенін түсіну үшін өрнекті қарастырайық:

false AND x = ?
true OR x = ?
Бұл xкез келген логикалық мәнді қабылдай алады. Ал жалпы логика заңдары мен ақиқат кестелері бойынша оның x ақиқат немесе жалған болуына қарамастан , бірінші өрнектің нәтижесі жалған , ал екіншісінің нәтижесі ақиқат болады . Қараңыз.
Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 17
Кейде өрнектің нәтижесін бірінші операндтан есептеуге болады. Бұл қысқартылған операторларды &&және ||. Жоғарыда сипатталғанға ұқсас өрнектерде олар екінші операндтың мәнін бағаламайды. Міне, шағын мысал:
Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 18
Стенографиялық операторлар жағдайында өрнектің екінші бөлігі бағаланбайды. Бірақ бұл өрнектің нәтижесі бірінші операндтан анық болған кезде ғана болады.

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. Бірақ бұл белгілерді ондық жүйедегідей принцип бойынша біріктіру арқылы біз шексіз санай аламыз.
Ондық және екілік санау жүйесінде 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тағы мүмкін қайталанbyteын бит комбинацияларының саны 256 (2 8 = 256). Бірақ Java-ға жақынырақ оралайық. Мұндай бүтін деректер түрі бар - byte. Бұл тип -128-ден 127-ге дейінгі мәндерді қабылдай алады және компьютер жадындағы бір сан дәл 8 бит немесе 1 byte алады. byteОсы түрдегі бір сан компьютердің 1 жадын алады . Және бұл жерде атаулар кездейсоқ емес. Біздің есімізде, 1 byte 256 түрлі мәнді сақтай алады. Бір типті сан byte256 түрлі мәнді қабылдай алады (128 теріс, 127 оң және 1 нөл). Әрбір сан мәнінің byteсегіз биттен тұратын бірегей жиыны болады. Бұл тек типте ғана емес byte, барлық интегралдық типтерде де болады. Мысал ретінде түрі byteең кішісі ретінде берілген. Төмендегі кестеде барлық Java бүтін түрлері және олар алатын жад кеңістігі көрсетілген: Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 12түрін қарастырыңыз int. Ол 2147483648 теріс мәндерді, 2147483647 оң мәндерді және бір нөлді сақтай алады. Барлығы:

2147483648 + 2147483647 + 1 = 4294967296.
Бұл тип компьютер жадында 32 битті алады. 32 нөлдер мен бірліктер жиынтығынан мүмкін болатын комбинациялар саны:
232 = 4294967296.
Түр ұстай алатын мәндер санымен бірдей сан int. Бұл деректер түрінің мәндерінің ауқымы мен оның өлшемі (жадтағы биттердің саны) арасындағы байланыстың демонстрациясы ғана. Java тіліндегі кез келген түрдегі кез келген санды екілік жүйеге түрлендіруге болады. Мұны Java тілін пайдалану арқылы қаншалықты оңай жасауға болатынын көрейік. Біз типтің мысалынан үйренеміз int. Бұл түрдің өз орауыш класы бар - Integer. toBinaryStringОның біз үшін барлық жұмысты жасайтын біреуі бар :
Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 21
Voila - бұл соншалықты күрделі емес. Бірақ бәрібір, бір нәрсені нақтылау керек. intсаны 32 бит алады. Бірақ жоғарыдағы мысалдағы 10 санын басып шығарғанда, консольде 1010-ды көреміз.Себебі, алдыңғы нөлдер басып шығарылмайды. Егер олар көрсетілсе, 1010 орнына біз консольде 000000000000000000000000000001010 көретін едік. Бірақ қабылдауға ыңғайлы болу үшін барлық алдыңғы нөлдер алынып тасталды. Сіз өзіңізден сұрамайынша қиын емес: теріс сандар туралы не деуге болады? Ол ақпаратты тек екілік жүйеде қабылдайды. Минус белгісін де екілік codeта жазу керек екен. Мұны тікелей немесе қосымша code арқылы жасауға болады.

Тікелей code

Екілік санау жүйесінде сандарды көрсету әдісі, онда ең маңызды бит (ең сол жақ бит) санның таңбасына бөлінеді. Егер сан оң болса, сол жақ бит 0, теріс болса - 1 деп жазылады.
Мысал ретінде 8 биттік санды қолданып қарастырайық:
Java операторларына кіріспе: логикалық, арифметикалық, разрядтық – 13Тәсіл қарапайым және, негізінен, түсінікті. Дегенмен, оның кемшіліктері бар: математикалық амалдарды орындаудағы қиындықтар. Мысалы, теріс және оң сандарды қосу арқылы. Қосымша манипуляциялар жасалмайынша, оларды бүктеу мүмкін емес.

Қосымша code

Қосымша codeты пайдалану арқылы сіз тікелей codeтың кемшіліктерінен аулақ бола аласыз. Санның қосымша codeын алудың қарапайым алгоритмі бар. -5 санының қосымша codeын алуға тырысайық. Бұл санды екілік санау жүйесінде екінің толықтауыш codeын пайдаланып көрсетейік. 1-қадам. Тікелей codeты пайдаланып теріс санның көрінісін аламыз. -5 үшін ол 10000101 болады. 2-қадам. Таңба цифрынан басқа барлық сандарды ауыстырыңыз. Барлық нөлдерді бірліктермен, ал ең сол жақ биттен басқа барлық жерде нөлдермен ауыстырайық.

10000101 => 11111010
3-қадам. Алынған мәнге біреуін қосыңыз:

11111010 + 1 = 11111011
Дайын. Екілік санау жүйесінде екінің толықтауыш codeын пайдаланып -5 мәнін алдық. Бұл келесі материалды түсіну үшін маңызды, өйткені Java теріс сандарды биттерде сақтау үшін екінің толықтыру codeын пайдаланады.

Битті операциялардың түрлері

Енді біз барлық кіріспелерді қарастырдық, енді Java тіліндегі биттік операциялар туралы сөйлесейік. Бүтін сандарға разрядтық операция орындалады және оның нәтижесі бүтін сан болады. Процесс барысында сан екілік жүйеге түрлендіріледі, әрбір битке операция орындалады және нәтиже ондық жүйеге қайта түрленеді. Операциялар тізімі төмендегі кестеде берілген: Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 14Біз бұрыннан белгілі болғандай, сандарды биттердің жиынтығы ретінде көрсетуге болады. Биттік операциялар дәл осындай көріністің әрбір биті бойынша операцияларды орындайды. NOT, AND, OR, алайық XOR. Еске салайық, біз жақында ғана логикалық операндтар үшін ақиқат кестелерін қарастырдық. Бұл жағдайда бүтін санның әрбір битіне бірдей операциялар қолданылады.

Биттік унарлы оператор NOT ~

Бұл оператор барлық нөлдерді бір, ал барлық нөлдерді нөлге ауыстырады. Ондық жүйеде 10 саны бар делік. Екілік жүйеде бұл сан 1010. Егер осы санға унарлы разрядтық терістеу операторын қолдансақ, келесідей нәрсе аламыз: Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 15Java 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
Бірінші жолда біз екілік санау жүйесінде алдыңғы нөлдерсіз мәнді алдық. Біз оларды көрмесек те, олар бар. Бұл барлық биттердің кері биттерге айналдырылған екінші жолымен дәлелденеді. Сондықтан біз көптеген жетекші бірліктерді көреміз. Бұл бірінші жолда басып шығару кезінде компилятор еленбеген бұрынғы жетекші нөлдер. Міне, түсінікті болу үшін алдыңғы нөлдерді көрсететін шағын бағдарлама.
Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 26

Биттік ЖӘНЕ операторы

Бұл оператор екі санға қолданылады. ANDОл әрбір санның разрядтары арасындағы операцияны орындайды . Мысал қарастырайық: Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 16Бұл операция екі санға орындалады. Java codeындағы мысал:
Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 28

Биттік НЕМЕСЕ операторы

OR екі санға қолданылады. Ол әрбір санның биттері арасында НЕМЕСЕ операциясын орындайды: Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 17Енді оның IDEA-да қандай болатынын қарастырайық:
Java операторларына кіріспе: логикалық, арифметикалық, разрядтық – 30

Биттік операция, эксклюзивті НЕМЕСЕ (XOR)

Сол мысалды қарастырайық, бірақ жаңа операциямен: Java операторларына кіріспе: Логикалық, арифметикалық, разрядтық – 18Мысал codeы:
Java операторларына кіріспе: логикалық, арифметикалық, разрядтық – 32

Солға биттік жылжу

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

    Міне, мысал:

    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 битке оңға жылжыту нәтижесін жазамыз;

    • devideOperationResulti дәрежесіне 2048 санын 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 тіліндегі операциялардың басымдылығы

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

Қолданудың пайдалы мысалдары

Санның паритеттігін анықтау

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

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

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