Operatör önceliği - 1

"Merhaba, Bilaabo!"

"Bilaabo arkadaşını selamlamaktan mutlu!"

"Bugün Bilaabo size operatör önceliğinden bahsedecek. Ama önce size operatörlerin kendisinden bahsedecek."

"Bahsettiğin bu operatörler ne?"

"Aslında onlara zaten aşinasın. Onlara operatör dendiğini bilmiyor olabilirsin."

"Örneğin,  c = a + b ifadesine sahip olduğumuzu varsayalım; "

"İki işleci vardır: bir toplama işleci ve bir atama işleci."

"Başka bir deyişle, operatörler sadece matematiksel işaretler mi? Çarpma, bölme ve toplama gibi mi?"

"Evet, bu doğru. Ancak farklılıklar var."

"Senin için operatörleri tanımlamayacağım: bir tanım seni daha akıllı yapmaz. Onları çalışırken görmek daha iyi. Operatörler, şimdi inceleyeceğimiz birkaç gruba ayrılabilir."

1) " Matematiksel operatörler "

Sembol Örnek İsim Açıklama (ne yapar)
+ a + b Toplama operatörü Toplama operatörü.
- c - d çıkarma operatörü İkinci sayıyı birinciden çıkarır.
* a * t çarpma operatörü İki sayıyı çarpar.
/ a / b Bölüm operatörü İlk sayıyı ikinciye böler.
% c % d İlk sayıyı ikinciye böler. Birinci sayıyı ikinciye böldükten sonra kalanı hesaplar.
- -a tekli eksi Değişkenin işaretini tersine çevirir.
Artıdan eksiye ve eksiden artıya.
+ +a birli artı Hiçbir şeyi değiştirmez. Bu, tekli eksi operatörünü tamamlamak için eklendi. Sadece görünüş için.

"Bunları okuldan tanıyorum. Donanım yazılımım okul kurslarını da içeriyor."

"Ama bu yüzde işaretinin nesi var, bir tür büyücülük mü?"

" Bölmeden sonra kalan " operatörüdür. 11'i 5'e bölersek 2 ve kalan 1 olur. Bu 1, % 11 5 yazılarak elde edilebilir;"

"Java'da tamsayıları böldüğünüzde sonuç da bir tamsayıdır. Bölme işleminden kalan basitçe göz ardı edilir. 8'i 5'e bölersek 1 elde ederiz."

İfade Sonuç
19 / 10 1 19'u 10'a bölersek sonuç 1 ve kalan 9 olur.
19 % 10 9 19'u 10'a bölersek sonuç 1 ve kalan 9 olur.
2 / 5 0 2'yi 5'e bölersek  sonuç 0 ve kalan 2 olur.
16 % 2 0 16'yı 2'ye bölersek, sonuç 8 ve kalan 0'dır .

"Ama geri kalanına ne gerek var ki?"

"Bir tamsayının çift olup olmadığını kontrol etmeniz gerektiğini varsayalım. O zaman şunu yazabilirsiniz:"

if (a % 2 == 0)

"Ve b'nin tek olup olmadığını kontrol etmeniz gerekirse, şunu yazabilirsiniz:"

if (b % 2 == 1)

"Veya d'nin 3'e bölünebilir olup olmadığını kontrol etmek için:"

if (d % 3 == 0)

"İlginç. Bunu hatırlayacağım."

2)  " Karşılaştırma operatörleri "

Sembol Örnek İsim Açıklama (ne yapar)
< a < b Daha az a'nın b'den küçük olup olmadığını kontrol eder.
<= c <= d küçük veya eşit c'nin d'den küçük veya eşit olup olmadığını kontrol eder.
> a > b daha büyük a'nın b'den büyük olup olmadığını kontrol eder.
>= c >= d büyük veya eşittir c'nin d'den büyük veya eşit olup olmadığını kontrol eder.
== i == j eşittir i'nin j'ye eşit olup olmadığını kontrol eder.
!= a != 0 Eşit değil a'nın sıfıra eşit olup olmadığını kontrol eder.

"Bunların hepsini zaten kullanıyorum."

"Ve bu operatörler ile matematiksel operatörler arasındaki temel fark nedir?"

"İki sayıyı toplarsak bir sayı elde ederiz, ancak iki sayıyı karşılaştırırsak doğru veya yanlış çıkar."

"Doğru. Bir karşılaştırmanın sonucu, bildiğiniz gibi, boole türüyle temsil edilen bir " mantıksal değer " değeridir. İki olasılık vardır: doğru veya yanlış.

"Evet, her şey açık. Bunu zaten biliyorum."

3) " Mantıksal operatörler "

Sembol Örnek İsim Açıklama (ne yapar)
&& a && b VE İfadenin sonucu yalnızca hem a hem de b doğru olduğunda doğrudur.
|| c || d VEYA a veya b doğruysa ifadenin sonucu doğrudur. İkisi veya en az biri.
! !a OLUMSUZ İfadenin sonucu yalnızca a yanlışsa doğrudur.

"Mantıksal işleçler yalnızca boolean değişkenler veya ifadelerle kullanılabilir."

Örnek Tanım
boolean a = true;
boolean b = true;if (a && b)
Her iki değer de doğruysa if koşulu doğrudur.
Başka bir deyişle, hem a hem de b doğruysa, sonuç doğrudur .
boolean a = true;
boolean b = false;if (a || b)
En az bir değer doğruysa if koşulu doğrudur.
Başka bir deyişle, a veya b doğruysa, sonuç doğrudur .
boolean b = false;

if (!b)

b doğru değilse if koşulu doğrudur.
Başka bir deyişle,   b false ise sonuç  true olur .
int a = 2, b = 3, c = 4;

if (a < b && a < c)
if ((a < b) && (a < c))

a, b'den küçükse ve a, c'den küçükse, ifadenin sonucu doğrudur.
a, b ve c tam sayılardır, ancak tamsayıları karşılaştırmanın sonucu mantıksal bir değerdir (doğru, yanlış), yani mantıksal işleçler kullanabiliriz.

"Bütün bunları zaten biliyorum."

"Gerçekten mi? O zaman devam edelim."

4) " Bitsel operatörler "

Sembol Örnek İsim Açıklama (ne yapar)
& a & b VE bit düzeyinde VE
| c | d VEYA bitsel VEYA
~ ~a OLUMSUZ bit düzeyinde DEĞİL
^ a ^ b XOR Bit düzeyinde "ÖZEL VEYA"

" Bitsel işleçler, tamsayılar üzerinde bit-bit işlemler gerçekleştirir."

"Bu da ne?"

"Her sayı bir bit kümesi olarak temsil edilir ve ardından sonuç aşağıdaki gibi hesaplanır:"

"Her iki sayının da ilk biti 1 ise, sonucun ilk biti 1 olacaktır."

"Her iki sayının ikinci biti 1 ise, sonucun ikinci biti 1 olacaktır. Ve böyle devam eder."

"Bu, tüm bitsel operatörler için geçerli mi?"

"Bundan çok daha basit. Bir bitin yalnızca iki değeri olabilir, 0 ve 1, değil mi?"

"Sağ."

"O zaman 1'i doğru ve 0'ı yanlış olarak düşünün. O zaman tek tek bitler üzerindeki işlemler, mantıksal işlemlerle hemen hemen aynı olacaktır:"

mantıksal ifade bit düzeyinde ifade
doğru && doğru == doğru 1&1 == 1
doğru && yanlış == yanlış 1&0 == 0
doğru || doğru == doğru 1|1 == 1
doğru || yanlış == doğru 1|0 == 1
yanlış || yanlış = yanlış 0|0 == 0
!yanlış == doğru ~0 == 1
!doğru == yanlış ~1 == 0

"Ah! Bu çok kolay."

"Evet, bit düzeyinde işlemlerin iki sayıdan karşılık gelen bitleri kullandığını unutmayın."

"Evet, hatırlıyorum: Bir sayının ilk biti, ikincinin ilk bitiyle eşleştiriliyor ve sonuç da ilk bit'e yazılıyor. Aynı şey geri kalan bitler için de geçerli."

"Doğru. Başka sorunuz var mı?"

"XOR ve 'özel veya' ile ne alakası var?"

"Çok kolay: Değerler farklı olduğunda doğrudur, aynı olduğunda yanlıştır."

mantıksal ifade bit düzeyinde ifade
doğru XOR doğru == yanlış 1 ^ 1 == 0
yanlış XOR yanlış == yanlış 0 ^ 0 == 0
doğru XOR yanlış == doğru 1 ^ 0 == 1
yanlış XOR doğru == doğru 0 ^ 1 == 1

İşte bitsel işlemlerin birkaç örneği daha:

Örnek Bit olarak sayılar Bit olarak sonuç Sonuç
5 & 3 0000010 1  & 0000001 1 0000000 1 1
7 & 2 000001 1 1 & 000000 1 0 00000010 2
5 | 9 00000 1 0 1  | 0000 1 00 1 00001101 13
5 ^ 9 00000 101  ^ 00001001 0000 1100 12
~9 ~ 00001001 11110110 246

"Teşekkürler Bilaabo. Artık biliyorum."

"Bir bitsel operatör grubu daha var, kaydırma operatörleri:"

5) " Shift operatörleri "

Sembol Örnek İsim Açıklama (ne yapar)
>> a >> b sağa kaydırma a sayısının bitlerini b basamak sağa kaydırır.
<< c << d Sol shift c sayısının bitlerini d basamak sola kaydırır.
>>> a >>> 2 imzasız sağa kaydırma a sayısının bitlerini 2 basamak sağa kaydırır.

"Bu nasıl bir sokak büyüsü?"

"Aslında hepsi çok basit. Şuna bir bak:"

Örnek Bit olarak sayılar Bit olarak sonuç Sonuç
10 >> 1 0000 101 0 >> 1 00000 101 5
10 >> 2 0000 101 0 >> 2 000000 10 2
10 << 1 0000 101 0 << 1 000 101 00 20
10 << 2 0000 101 0 << 2 00 101 000 40

"Bir sayının bitlerini 1 ile sola kaydırmak, sayıyı 2 ile çarpmakla aynı şeydir. İki basamak kaydırma, 4 ile, üç basamakla çarpmaya eşdeğerdir - 8 ile çarpma vb."

"Sağa kaydırmak 2, 4, 8, 16 vb. ile bölmeye karşılık gelir."

"Fakat >>> ve >> operatörleri arasındaki fark nedir?"

"Negatif sayılarla çalışırken farklılık gösterirler. Bunun nedeni  , işaretli sayıların işareti belirtmek için en soldaki biti kullanmasıdır. Sonuç olarak, sağa kaydırıldığında negatif bir sayı negatif olmaktan çıkar. Böylece iki farklı operatör buldular. Buna bir bak:"

İfade Sonuç Tanım
1 000 1010 >> 1 11 000 101 Negatif sayı negatif kalır.
Negatif sayılar için gelen bitler 1'lerle doldurulur.
1 000 1010 >> 2 111 000 10
1 000 1010 >> 3 1111 000 1
1 000 1010 >>> 1 01 000 101 Negatif sayı artık negatif değil. Negatif sayılar için gelen bitler 0'larla doldurulur.
1 000 1010 >>> 2 001 000 10
1 000 1010 >>> 3 0001 000 1

"Kayma döngüsel değildir. Sayının sol veya sağ kenarının ötesine geçen bitler basitçe atılır."

6) " Atama işleçleri "

"Görevin ne olduğunu zaten biliyorum. Ama neden 'operatörler' diyorsunuz?"

"Çünkü birkaç tane var ☺"

Şebeke Ne demek
a += b; a = a + b;
a -= b; a = a - b;
a *= b; a = a * b;
a %= b; a = a % b;
a |= b; a = a | b;
a &= b; a = a & b;

"Sanırım mantığını anladın."

7) " Arttırma ve azaltma operatörleri "

Gösterim Örnek Tanım
++ a++;
++b;
Sayıyı 1 artırır.
-- d--;
--i;
Sayıyı veya değişkeni 1 azaltır.

"Değişkenin önüne veya arkasına iki eksi işareti koymak arasında bir fark var mı?"

"Evet, çok büyük olmasa da var. Bu operatörlerden birine sahip bir değişken bir ifadenin veya atamanın parçasıysa, o zaman farklılıklar vardır. Örnekle göstermeyi tercih ederim:"

Örnek gerçekten ne oluyor Tanım
int a = 3;
int b = ++a;
int a = 3;
a = a + 1;
int b = a;
a önce 1 artırılır sonra ifadede kullanılır.
int a = 3;
int b = a++;
int a = 3;
int b = a;
a = a + 1;
ifadede önce a kullanılır, sonra 1 artar.
int a = 3;
return a++;
int a = 3;
int result = a;
a = a + 1;
return result;
İşlev 3 döndürür, ancak a'nın değeri 1 artırılır.
int x = 5;
x = ++x + ++x;
int x = 5;
int a = x + 1;// The first term is 6
x = a;
int b = x + 1;// The second term is 7
x = b;
x = a + b;
Buradaki sonuç 13'tür. Önce x 1 artacak ve bu değer ilk terimin yerine geçecek daha sonra x tekrar 1 artacaktır.

"Vay canına! Harika!"

"Beğenmene sevindim. Ama anlatım ve atama yoksa o zaman bir fark yok."

"x++, x = x + 1'e eşdeğerdir."

"++x, x = x + 1'e eşdeğerdir."

"Bunu aklımda tutacağım. Teşekkürler, Bilaabo."

8)  " Üçlü operatör "

"Bu operatör yalnızca bir veya iki değişken veya ifade kullanmaz. Aynı anda üç değişken veya ifade kullanır:"

Gösterim eşdeğer kod:
a ? b : c; if (a)
b
else
c
int min = a < b ? a : b; if (a < b)
min = a;
else
min = b;
return a != null ? a.length : 0; if (a != null)
return a.length;
else
return 0;

"Pekala, bu çok uygun."

"Evet. Kompakt ve kodu okunabilir. Keyifle kullanın!"

9) " Diğer "

"Müzik koleksiyonunuz ne kadar iyi organize edilmiş olursa olsun, yine de bir "Çeşitli" klasörü oluşturmanız gerekir."

"Evet, müziği kategorize etmek zorunda kalan herkes kesinlikle aynı fikirde olacaktır."

"Yani, size bahsetmek istediğim üç operatör daha var:"

Gösterim Örnek Tanım
() (a + b) * c Parantezler operatör önceliğini artırır.
Parantez içindeki şeyler önce yürütülür.
[] c [i] = c [i + 1]; Dizine göre bir dizi öğesi alın.
. int n = a.length; " Nokta işleci " bir nesnenin değişkenlerine ve yöntemlerine erişir.

"Ve son olarak, işte operatör önceliğini özetleyen bir tablo:"

Operatörler örnekler
En yüksek öncelik (operatörler bu tablodaki sıralarına göre yürütülür)
()
[]
.
(a + b)
c [i] = c [i] + 1
++
--
~
!
+
-
i++; ++i;
--j; a--;
~c
!f
return +a;
return -a;
*
/
%
a * b
c / d
a % b
+
-
a + b
c - d
String s = "count"+"35";
>>
<<
>>>
a >> 3
b << 2
c >>> 3
<
<=
>
>=
a < b
a <= b
c > b
c >= b
==
!=
a == 3
a != 0
& a & 7
^ a ^ b
| a | b
&& (a < b) && (a < c)
|| (b != 0) || (c != 0)
? : = a > 0 ? a : -a;
=
*=, /=, %=
-=, +=
<<=. >>=, >>>=
&=, ^=. |=
En düşük öncelik (en son gerçekleştirilen)