Java-da əməliyyatlar haqqında danışaq: ədədi, məntiqi, bitwise. Bu proqramlaşdırmanı öyrənmək üçün mütləq lazım olan nəzəri əsasdır.
Cədvəl 1. Binar arifmetik operatorlar
İlk dörd operator heç bir sual verməməlidir: hər şey riyaziyyatdakı kimidir. Son operator, bölmənin qalan hissəsi də çox mürəkkəb bir şey etmir. Məsələn, 24-ü 7-yə bölsək, 3 tam ədəd və 3 qalıq alırıq. Bu operatorun geri qayıdacağının qalan hissəsi:
İkili operatorlardan əlavə Java-da birlik arifmetik operatorlar var.
Cədvəl 2. Unar arifmetik operatorlar:
Birar artı və minus nümunəsi:
Artırma və azaltma əməliyyatları mahiyyətcə sadədir. Birinci halda dəyişən 1 artır, ikincidə isə 1 azalır. Nümunə aşağıdadır:
Cədvəl 3. Artırma-azaltma operatorları:
Nümayiş:
Arifmetika ilə yanaşı, müqayisə əməliyyatları da var (iki ədəddən). Nəticə həmişə doğru və ya yalan olacaq ( doğru / yanlış ).
Cədvəl 4. Müqayisə operatorları
Nümunələr:
Cədvəl 5. İnkar operatoru Həqiqət Cədvəli (YOX)
Cədvəl 6. Bağlayıcı operatorun həqiqət cədvəli (AND)
Cədvəl 7. Ayrılma operatorunun həqiqət cədvəli (OR)
Cədvəl 8. Modul toplama operatorunun həqiqət cədvəli (XOR)
Java eyni məntiqi əməliyyatlara malikdir:
Və ifadələrə
İndi bizdə stenoqrafik operatorlar (
Bəzən ifadənin nəticəsi birinci operanddan hesablana bilər. Qısaldılmış operatorları
Stenoqrafiya operatorlarında ifadənin ikinci hissəsi qiymətləndirilmir. Ancaq bu, yalnız ifadənin nəticəsi birinci operanddan aydın olduqda baş verir.
Onluq və ikilik sistemdə 0-dan 15-ə qədər saymağı nümayiş etdirək:
Gördüyünüz kimi, hər şey o qədər də mürəkkəb deyil. Bitlərə əlavə olaraq, digər tanış məlumat vahidləri də var - bayt , kilobayt , meqabayt , gigabayt və s. Yəqin ki , 1 baytda 8 bit olduğunu bilirsiniz . Bunun mənası nədi? Bu o deməkdir ki, ard-arda 8 bit 1 bayt tutur. Baytların nə ola biləcəyinə dair nümunələr:
Voila - bu o qədər də mürəkkəb deyil. Ancaq yenə də bir şeyi aydınlaşdırmaq lazımdır.
Nümunə olaraq 8 bitlik rəqəmdən istifadə edərək buna baxaq:
Yanaşma sadədir və prinsipcə başa düşüləndir. Bununla belə, onun mənfi cəhətləri var: riyazi əməliyyatları yerinə yetirməkdə çətinliklər. Məsələn, mənfi və müsbət ədədlərin əlavə edilməsi ilə. Əlavə manipulyasiyalar aparılmayınca onları qatlamaq olmaz.
Birinci sətirdə ikilik say sistemində sıfırlar olmadan dəyəri əldə etdik. Biz onları görməsək də, oradadırlar. Bu, bütün bitlərin tərs olanlara çevrildiyi ikinci xətt ilə sübut olunur. Buna görə də biz çoxlu aparıcı vahidləri görürük. Bunlar birinci sətirdə çap edildikdə tərtibçi tərəfindən nəzərə alınmayan əvvəlki aparıcı sıfırlardır. Budur, aydınlıq üçün aparıcı sıfırları göstərən kiçik bir proqram.
İndi. Sağa sürüşdürülmüş rəqəmlər haqqında nə deyə bilərsiniz? Onlar 2-yə bölünür. Hər dəfə bir biti sağa sürüşdürdükdə, orijinal ədədi 2-yə bölürük. Əgər ədəd 2-yə bölünmürsə, nəticə mənfi sonsuzluğa (aşağıya) yuvarlaqlaşdırılacaq. Amma bu, yalnız bitləri tam olaraq 1-ə köçürsək işləyir. Və əgər 2 bitə, 4-ə bölün. 3 bitə, 8-ə bölün. 4 bitə, 16-ya bölün. Baxın?
- Java-da hansı operator növləri var?
- JavaRush Kursunda Java Operatorları
- Java-da nömrə əməliyyatları
- Java-da məntiqi əməliyyatlar
- Java-da bitwise əməliyyatları
- Java-da əməliyyatların üstünlüyü
- Faydalı istifadə nümunələri
Java-da hansı operator növləri var?
Hər hansı bir əməliyyat üçün bizə ən azı iki şey lazımdır:- operator;
- operand.
JavaRush Kursunda Java Operatorları
Bir neçə mühazirə birinci axtarışın dördüncü səviyyəsində - Java Sintaksisində Java operatorlarına həsr edilmişdir . Xüsusilə, boolean kimi şərti operatorlar . Kursda müqayisə operatorlarının, şərti operatorların və məntiqi operatorların işini başa düşməyə kömək edəcək 22 tapşırıq var.Java-da nömrə əməliyyatları
Proqramçıların ədədlər üzərində yerinə yetirdiyi ən ümumi əməliyyat dəyişənə rəqəmli qiymət təyin etməkdir. O, operator kimi=
sizə tanışdır:
int a = 1;
int b = 2;
int c = 3;
Arifmetik əməliyyatlar da var. Onlar ikili arifmetik operatorlardan istifadə etməklə həyata keçirilir:
System.out.println(24 % 7); // prints 3
Budur rəsmi Oracle sənədləşmə saytından nümunələr: Bu proqram aşağıdakıları çıxaracaq: 1 + 2 = 3 3 - 1 = 2 2 * 2 = 4 4 / 2 = 2 2 + 8 = 10 10 % 7 = 3 Java sizə imkan verir birləşdirmək üçün: məsələn, operatorların tapşırıqları və arifmetik operatorlar. Bir misala baxaq:
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
Burada bir dəyişən təyin etdik x
və ona sıfır dəyəri təyin etdik. Bundan sonra, hər bir sətirdə x
dəyişənin cari dəyərinin cəminə bir dəyər təyin edirik x
. Şərhlərdə hər sətir üçün izahatlar var. Bu prosedur dəyişəni böyütmək və ya artırmaq adlanır. Yuxarıdakı nümunədəki artım əməliyyatı operatorların birləşməsindən istifadə etməklə oxşar əməliyyatla əvəz edilə bilər:
int x = 0;
x += 1; // x = 0 + 1 => x = 1
x += 1; // x = 1 + 1 => x = 2
x += 1; // x = 2 + 1 => x = 3
Təyinat operatorunu istənilən arifmetik operatorla birləşdirə bilərsiniz:
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;
Son nümunənin necə işlədiyini nümayiş etdirək:
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
Bu əməliyyatların iki növü var - postfiks və prefiks. Birinci halda operator dəyişəndən sonra, ikinci halda isə dəyişəndən əvvəl yazılır. Yeganə fərq artırma və ya azaltma əməliyyatının yerinə yetirildiyi zamandır. Aşağıdakı cədvəldə nümunə və təsvir. Deyək ki, bizim dəyişənimiz var:
int a = 2;
Sonra:
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);
Nümayiş:
Java-da məntiqi əməliyyatlar
Onların hər birinin məntiqi əməliyyatlarına və həqiqət cədvəllərinə baxaq:- inkar əməliyyatı (
NOT
); - birləşmə əməliyyatı, məntiqi VƏ (
AND
); - disjunksiya əməliyyatı, məntiqi OR (
OR
); - modul əlavə əməliyyatı, eksklüziv OR (
XOR
).
!
— inkar operatoru;&&
— məntiqi AND operatoru (qısa);||
— məntiqi OR operatoru (qısa);&
— bit üzrə AND operatoru;|
— bit üzrə OR operatoru;^
— bit üzrə eksklüziv OR operatoru.
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();
}
}
Bu proqram göstərəcək: NÜMUNƏ DEYİL: YANLIŞ DEYİL = doğru DEYİL = false VƏ NÜMUNƏ: false AND false = false false AND true = false true AND false = false true AND true = true OR MISPLE: false OR false = false false OR true = doğru doğru və ya yalan = doğru doğru VEYA doğru = doğru XOR NÜMUNƏ: yanlış XOR false = yanlış yalan XOR doğru = doğru doğru XOR yanlış = doğru doğru XOR doğru = yanlış Məntiqi operatorlar yalnız boolean
dəyişənlərə tətbiq edilir. Bizim vəziyyətimizdə biz onları birbaşa dəyərlərə tətbiq etdik, lakin siz onları dəyişənlərlə də istifadə edə bilərsiniz boolean
:
boolean
:
&&
, ||
) və oxşar bit operatorları ( &
, |
) var. Onların arasındakı fərq nədir? Birincisi, bit istiqamətində tam ədədlərə tətbiq oluna bilər. Bu barədə bir az sonra danışacağıq. İkincisi, bəziləri qısaldılmışdır, bəziləri isə yox. Abreviaturanın nəyə bənzədiyini başa düşmək üçün ifadəyə baxaq:
false AND x = ?
true OR x = ?
Bu x
istənilən Boolean dəyərini qəbul edə bilər. Və ümumiyyətlə, məntiq qanunlarına və həqiqət cədvəllərinə görə, x
doğru və ya yalan olmasından asılı olmayaraq , birinci ifadənin nəticəsi yalan , ikincinin nəticəsi isə doğru olacaqdır . Bax.
&&
və ||
. Yuxarıda təsvir edilənlərə bənzər ifadələrdə onlar ikinci operandın dəyərini qiymətləndirmirlər. Budur kiçik bir nümunə:
Java-da bitwise əməliyyatları
Yaxşı, burada ən maraqlı hissəyə gəlirik: bit əməliyyatları. Adından da göründüyü kimi bunlar bitlər üzərində yerinə yetirilən əməliyyatlardır. Ancaq bu mövzuya keçməzdən əvvəl əlaqəli sahələr haqqında danışmağa dəyər.Ədədlərin ikilik say sistemində təsviri
Nömrələr, proqramdakı hər hansı digər məlumat kimi, ikili kodda kompüter yaddaşında saxlanılır. İkili kod sıfırlar və birlər toplusudur. Hər bir sıfır və ya bir bit adlanan məlumat vahidini təmsil edir.Vikipediyaya görə:
Bit (ingilis dilindən ikili rəqəm - ikilik rəqəm; həmçinin sözlər üzərində oyun: ingiliscə bit - parça, hissəcik) məlumat miqdarının ölçü vahididir. 1 bit məlumat iki məna daşıya bilən simvol və ya siqnaldır: açıq və ya sönük, bəli və ya yox, yüksək və ya aşağı, yüklənmiş və ya yüksüz; binar sistemdə 1 (bir) və ya 0 (sıfır) olur.Bitwise operatorları hansı verilənlərlə işləyir?
Java-da bitwise əməliyyatları yalnız tam ədədlər üzərində aparılır. Tam ədədlər kompüter yaddaşında bitlər dəsti kimi saxlanılır. Deyə bilərik ki, kompüter istənilən məlumatı ikilik say sisteminə (bitlər toplusuna) çevirir və yalnız bundan sonra onunla qarşılıqlı əlaqədə olur. Bəs ikili say sistemi necə işləyir? Onluq say sistemində cəmi 10 simvolumuz var: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Saymaq üçün bu simvollardan istifadə edirik. 9-dan sonra 10, 19-dan sonra - 20, 99-dan sonra - 100, 749-dan sonra - 750 gəlir. Yəni biz mövcud 10 simvolun birləşməsindən istifadə edirik və onlardan “sıfırdan nahara qədər” saymaq üçün istifadə edə bilərik. İkilik say sistemində on simvol əvəzinə cəmi iki - 0, 1 olur. Amma bu simvolları onluq sistemdəki kimi eyni prinsipə uyğun birləşdirərək qeyri-müəyyən müddətə saya bilərik.
00000000 - 1 byte
10110010 - 1 byte
01011011 - 1 byte
Bir baytda mümkün təkrarlanmayan bit birləşmələrinin sayı 256-dır (2 8 = 256). Ancaq Java-ya daha yaxın qayıdaq. Belə bir tam məlumat növü var - byte
. Bu tip -128-dən 127-yə qədər qiymətlər ala bilər və kompüter yaddaşındakı bir nömrə tam olaraq 8 bit və ya 1 bayt tutur. byte
Bu tip bir nömrə tam olaraq 1 kompüter yaddaşını tutur . Və burada adlar təsadüfən üst-üstə düşmür. Xatırladığımız kimi, 1 bayt 256 fərqli dəyəri saxlaya bilir. Və bir növ nömrə byte
256 fərqli dəyər ala bilər (128 mənfi, 127 müsbət və 1 sıfır). Hər bir nömrə dəyərinin byte
səkkiz bitdən ibarət unikal dəsti var. Bu, təkcə tipdə deyil byte
, bütün inteqral növlərdə belədir. Növ byte
ən kiçik kimi nümunə olaraq verilmişdir. Aşağıdakı cədvəl Java-nın bütün tam növlərini və onların tutduğu yaddaş yerini göstərir: Növü nəzərdən keçirin int
. O, 2147483648 mənfi dəyər, 2147483647 müsbət dəyər və bir sıfır saxlaya bilər. Ümumi:
2147483648 + 2147483647 + 1 = 4294967296.
Bu tip kompüter yaddaşında 32 bit yer tutur. 32 sıfır və bir dəstdən mümkün birləşmələrin sayı:
232 = 4294967296.
Növün tuta biləcəyi dəyərlərin sayı ilə eyni ədəd int
. Bu, sadəcə bir məlumat növünün dəyər diapazonu ilə onun ölçüsü (yaddaşdakı bitlərin sayı) arasındakı əlaqənin nümayişidir. Java-da istənilən növ istənilən sayda binar sistemə çevrilə bilər. Gəlin görək Java dilindən istifadə etməklə bunun nə qədər asan həyata keçirilə bilər. Tip nümunəsindən öyrənəcəyik int
. Bu növün öz sarğı sinfi var - Integer
. Və onun toBinaryString
bizim üçün bütün işləri görəcək biri var:
int
nömrə 32 bit alır. Amma yuxarıdakı misalda 10 rəqəmini çap etdikdə konsolda 1010 görürük.Bu ona görədir ki, aparıcı sıfırlar çap olunmur. Əgər onlar göstərilsəydi, 1010 əvəzinə biz konsolda 000000000000000000000000000001010-u görərdik. Lakin qavrayış asanlığı üçün bütün aparıcı sıfırlar buraxılmışdır. Özünüzə sual verməyincə o qədər də çətin deyil: mənfi ədədlər necə? O, məlumatı yalnız ikili sistemdə qəbul edir. Belə çıxır ki, mənfi işarəni də ikili kodla yazmaq lazımdır. Bu, birbaşa və ya tamamlayıcı koddan istifadə etməklə edilə bilər.
Birbaşa kod
Ən əhəmiyyətli bitin (ən soldakı bit) ədədin işarəsinə ayrıldığı ikilik say sistemində ədədləri təmsil etmək üsulu. Rəqəm müsbətdirsə, ən soldakı bitə 0, mənfi olduqda - 1 yazılır.Əlavə kod
Əlavə koddan istifadə etməklə siz birbaşa kodun mənfi cəhətlərindən qaça bilərsiniz. Ədədin əlavə kodunu əldə etmək üçün sadə bir alqoritm var. Gəlin -5 rəqəminin əlavə kodunu əldə etməyə çalışaq. Bu ədədi ikili say sistemində ikinin tamamlayıcı kodundan istifadə edərək təmsil edək. Addım 1. Birbaşa koddan istifadə edərək mənfi ədədin təsvirini əldə edirik. -5 üçün 10000101 olacaq. Addım 2. İşarə rəqəmindən başqa bütün rəqəmləri çevirin. Bütün sıfırları birlərlə, ən soldakı bitdən başqa hər yerdə sıfırları sıfırlarla əvəz edək.
10000101 => 11111010
Addım 3. Yaranan dəyərə birini əlavə edin:
11111010 + 1 = 11111011
Hazır. İkili say sistemində ikinin tamamlayıcı kodundan istifadə edərək -5 qiymətini aldıq. Bu, aşağıdakı materialı başa düşmək üçün vacibdir, çünki Java mənfi ədədləri bitlərdə saxlamaq üçün ikinin tamamlayıcı kodundan istifadə edir.
Bitwise əməliyyatlarının növləri
İndi bütün girişlərlə məşğul olduq, gəlin Java-da bitwise əməliyyatları haqqında danışaq. Tam ədədlər üzərində bit üzrə əməliyyat aparılır və onun nəticəsi tam ədəddir. Prosesdə ədəd ikilik sistemə çevrilir, hər bit üzərində əməliyyat yerinə yetirilir və nəticə yenidən ondalığa çevrilir. Əməliyyatların siyahısı aşağıdakı cədvəldə verilmişdir: Artıq aşkar etdiyimiz kimi, ədədlər bitlər dəsti kimi təqdim edilə bilər. Bitwise əməliyyatları bu cür təsvirin hər bir biti üzərində əməliyyatları yerinə yetirir. götürəkNOT
, AND
, OR
, XOR
. Xatırladaq ki, bu yaxınlarda biz həqiqət cədvəllərinə yalnız məntiqi operandlar üçün baxmışdıq. Bu zaman eyni əməliyyatlar tam ədədin hər bitinə tətbiq edilir.
Bitwise unar operator NOT ~
Bu operator bütün sıfırları birlərlə, hamısını isə sıfırlarla əvəz edir. Tutaq ki, bizdə 10 rəqəmi ondalıq qeydlərdə var. Binar sistemdə bu ədəd 1010-dur. Bu ədədə birlik bitwise inkar operatorunu tətbiq etsək, belə bir şey əldə edirik: Java kodunda onun necə göründüyünə nəzər salaq: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));
}
İndi konsolda nə göstərildiyinə baxaq:
Bitwise AND operatoru
Bu operator iki nömrəyə aiddir.AND
Hər ədədin bitləri arasında əməliyyat həyata keçirir . Nümunəyə baxaq: Bu əməliyyat iki ədəd üzərində aparılır. Java kodundakı nümunə:
Bitwise OR operator
OR iki rəqəmə aiddir. O, hər nömrənin bitləri arasında OR əməliyyatını yerinə yetirir: İndi gəlin bunun IDEA-da necə görünəcəyinə nəzər salaq:Bitwise əməliyyat, eksklüziv OR (XOR)
Gəlin eyni nümunəyə baxaq, lakin yeni əməliyyatla: Nümunə kodu:Bit istiqamətində sola sürüşdürün
Bu operator iki operanda tətbiq olunur, yəni əməliyyatdax << y
nömrənin bitləri mövqeləri sola x
keçirəcək . y
Bunun mənası nədi? Əməliyyat nümunəsinə baxaq.Əməliyyatın 10 << 1
nəticəsi ondalıq sistemdə 20 rəqəmi olacaq. Yuxarıdakı diaqramdan göründüyü kimi, bütün bitlər sola 1-ə sürüşdürülür. Bu əməliyyat zamanı ən əhəmiyyətli bitin (ən soldakı bit) dəyəri itirilir. Və ən az əhəmiyyətli bit (ən sağdakı bit) sıfırla doldurulur. Bu əməliyyat haqqında nə deyə bilərsiniz?
-
X
Nömrənin bitləriniN
sola keçərək, rəqəmiX
2 N -ə vururuq .Budur bir nümunə:
-
Amma! 1 dəyəri olan bit ən sol mövqeyi tutarsa, nömrənin işarəsi dəyişə bilər.
-
Əgər siz qeyri-müəyyən müddətə sola keçirsəniz, rəqəm sadəcə olaraq 0-a çevriləcək. Gəlin 2 və 3-cü bəndləri nümayiş etdirək:
Bitwise sağa sürüşdürün
Bu operator iki operanda tətbiq edilir. Bunlar. əməliyyatdax >> y
ədədin bitləri mövqeləri sağa x
keçirəcək . y
Başqa bir misala baxaq. Əməliyyatı sxematik təhlil edək 10 >> 1
. 10 rəqəminin bütün bitlərini bir mövqedən sağa keçirək: Köçürmə əməliyyatı zamanı biz düzgün bitləri itiririk. Sadəcə yox olurlar. Ən soldakı bit ədədin işarəsidir (0 müsbət, 1 mənfi). Buna görə də, son dəyərdə orijinal nömrədəki kimi yerləşdirilir. Mənfi nömrə ilə misal: Ən sağdakı bit itirilir, ən soldakı bit isə nömrənin fəxri əlaməti olaraq orijinal nömrədən kopyalanır. Bütün bunları IDEA-da necə etmək olar? Prinsipcə, mürəkkəb bir şey yoxdur, sadəcə götürün və köçürün:
X
2-nin səlahiyyətləri... Ədədi bitlərlə sağa köçürdükdə rəqəmi 2-nin 2-nin qüvvəsinə N
bölürük . Nümayiş: X
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);
}
}
}
Burda nə baş verir?
-
i dəyişəninin 1-dən 10-a qədər artırıldığı dövrə.
- Hər iterasiyada 2 dəyər hesablayırıq:
-
shiftOperationResult
2048 rəqəminin i bit sağa sürüşdürülməsinin nəticəsini dəyişənə yazırıq; -
devideOperationResult
2048 rəqəmini i gücünə 2-yə böldükdən sonra çıxan nəticəni dəyişənə yazırıq . -
Alınan iki dəyəri cüt-cüt göstəririk.
GO TO FULL VERSION