Aritmetik işlemler. Bitsel Bileşik Atama İşlemleri. döküm işlemi

  • 06.05.2019

Son Güncelleme: 30.10.2018

Bit düzeyinde veya bitsel işlemler bireysel rakamlar veya sayı bitleri üzerinde gerçekleştirilir. Bu işlemlerde sadece tamsayılar işlenen olarak kullanılabilir.

Her sayının belirli bir ikili gösterim... Örneğin, 4 sayısı İkili sistem 100 ve 5 sayısı 101'dir, vb.

Örneğin, aşağıdaki değişkenleri alın:

Bayt b = 7; // 0000 0111 kısa s = 7; // 0000 0000 0000 0111

Bayt türü, 8 bit ile temsil edilen sırasıyla 1 bayt veya 8 bit kaplar. Bu nedenle, b değişkeninin değeri ikili kod 00000111'e eşit olacaktır. Kısa tür bellekte 2 bayt veya 16 bit yer kaplar, bu nedenle sayı bu türden 16 hane ile temsil edilecektir. Ve bu durum ikili dosyadaki s değişkeni 0000 0000 0000 0111 değerine sahip olacaktır.

Java'da imzalı sayılar yazmak için şunu kullanın: ek kod (ikinin tamamlayıcısı), içinde en önemli bitin imzalandığı yer. Değeri 0 ise, sayı pozitiftir ve ikili gösterimi, işaretsiz bir sayıdan farklı değildir. Örneğin, 0000 0001'de ondalık sistem 1.

En anlamlı bit 1 ise, o zaman negatif sayı... Örneğin, ondalık olarak 1111 1111 -1'i temsil eder. Buna göre 1111 0011, -13'ü temsil eder.

mantıksal işlemler

Sayılar üzerindeki mantıksal işlemler, bit düzeyinde işlemleri temsil eder. Bu durumda, sayılar ikili gösterimde kabul edilir, örneğin, ikili sistemde 2, 10'dur ve iki basamaklıdır, 7 sayısı 111'dir ve üç basamaklıdır.

    & (mantıksal çarpma)

    Çarpma bit bazında yapılır ve her iki işlenenin de bit değerleri 1'e eşitse işlem 1 döndürür, aksi takdirde 0 sayısı döndürülür.Örneğin:

    Int a1 = 2; // 010 int b1 = 5; // 101 System.out.println (a1 & b1); // sonuç 0 int a2 = 4; // 100 int b2 = 5; // 101 System.out.println (a2 & b2); // sonuç 4

    İlk durumda, iki sayı 2 ve 5'e sahibiz. 2, 010 sayısını ve 5 - 101 sayısını temsil eder. Sayıların (0 * 1, 1 * 0, 0 * 1) bitsel çarpımı 000 sonucunu verir.

    İkinci durumda, iki yerine, tıpkı 5 sayısı gibi, ilk hanesinde 1 olan 4 sayısı var, yani burada işlemin sonucu (1 * 1, 0 * 0, 0 * 1) = 100, ondalık biçimde 4 sayısı olacaktır ...

    | (mantıksal ekleme)

    Bu işlem ikili sayılar üzerinde de gerçekleştirilir, ancak bu bitteki en az bir sayının bir birimi varsa ("mantıksal VEYA" işlemi) şimdi bir birim döndürülür. Örneğin:

    Int a1 = 2; // 010 int b1 = 5; // 101 System.out.println (a1 | b1); // sonuç 7 - 111 int a2 = 4; // 100 int b2 = 5; // 101 System.out.println (a2 | b2); // sonuç 5 - 101

    ^ (mantıksal özel VEYA)

    Bu işleme XOR da denir, genellikle basit şifreleme için kullanılır:

    Int sayısı = 45; // 1001 Şifrelenecek değer - ikili biçimde 101101 int anahtar = 102; // Şifreleme anahtarı - ikili 1100110'da int şifreleme = sayı ^ anahtarı; // Sonuç, 1001011 veya 75 System.out.println ("Şifreli sayı:" + şifreleme); int şifresini çöz = ^ anahtarını şifrele; // Sonuç, orijinal 45 System.out.println numarası olacaktır ("Şifrelenmiş sayı:" + şifresini çöz);

    Burada bitsel işlemler de yapılır. Her iki sayı için geçerli bitin farklı değerlerine sahipsek, o zaman 1 döndürülür, aksi takdirde 0 döndürülür.Örneğin, 9 ^ 5 ifadesinin sonucu 12 sayısı olacaktır. sonucun tersi işlem.

    ~ (mantıksal olumsuzlama)

    Bir sayının tüm basamaklarını tersine çeviren bit düzeyinde bir işlem: bit değeri 1 ise, sıfır olur ve bunun tersi de geçerlidir.

    Bayt a = 12; // 0000 1100 System.out.println (~ a); // 1111 0011 veya -13

Vardiya işlemleri

Sayıların basamakları üzerinde de kaydırma işlemleri yapılır. Kayma sağa ve sola olabilir.

    a<

    a >> b - a sayısını b basamaklı sağa kaydırır. Örneğin, 16 >> 1, 16 sayısını (ikili sistemde 10.000'dir) bir basamak sağa kaydırır, yani sonuç 1000 veya ondalık gösterimde 8 sayısıdır.

    a >>> b - önceki vardiya türlerinin aksine bu operasyon işaretsiz bir kaydırmayı temsil eder - a sayısını b basamaklı sağa kaydırır. Örneğin, -8 >>> 2 ifadesi 1073741822'ye eşit olacaktır.

Böylece, bir tarafa veya diğerine kaydırılması gereken orijinal sayı ikiye bölünürse, aslında iki ile çarpma veya bölme elde edilir. Bu nedenle, donanım seviyesindeki kaydırma işlemi bölme veya çarpma işlemine göre daha ucuz olduğu için doğrudan ikiye bölme veya çarpma yerine böyle bir işlem kullanılabilir.

Java ders notları. 4. Oturum

(yok) (yok) ::
(Yok)
(V. Fesyunov)

Java'daki Operatörler

Çoğu Java işlemi basit ve sezgiseldir. Bunlar +, -, *, / gibi işlemlerdir,<,>ve diğerleri Operasyonların kendi yürütme sırası ve öncelikleri vardır. yani ifadede

çarpma, toplamadan daha yüksek önceliğe sahip olduğundan, önce çarpma ve ardından toplama yapılır. ifadede

önce a + b hesaplanır ve ardından bu işlemlerin sırası soldan sağa olduğu için sonuçtan c çıkarılır.

Ancak Java operasyonlarının kendine has özellikleri vardır. içine girmeden Detaylı Açıklama en basit işlemler, özellikler üzerinde duralım.

İle başlayalım atamalar... Java'daki diğer bir dizi programlama dilinden farklı olarak, atama bir operatör değil, bir işlemdir. Bu işlemin semantiği aşağıdaki gibi açıklanabilir.

  • Atama işlemi "=" sembolü ile gösterilir. Sağ işlenenin değerini hesaplar ve sol işlenene atar ve sonuç olarak atanan değeri döndürür. Bu değer diğer işlemler tarafından kullanılabilir. Sağdan sola birkaç atama dizisi gerçekleştirilir.

En basit durumda, her şey her zamanki gibi görünüyor.

Burada sezgisel olarak kastettiğimiz tam olarak gerçekleşir - a ve b'nin toplamı hesaplanır, sonuç x'e girilir. Ama burada iki örnek daha var.

İlkinde b'ye önce 1 girilir, işlemin sonucu 1'dir, sonra bu sonuç a'ya girilir. İkinci örnekte, a ve b toplamı hesaplanır ve sonuç kaybolur. Bu anlamsızdır, ancak sözdizimsel olarak geçerlidir.

Karşılaştırma işlemleri

Bunlar işlemler>,<, >=, <=, != и ==. Следует обратить внимание, что сравнение на равенство обозначается двумя знаками "=". Операндами этих операций могут быть арифметические данные, результат — типа boolean.

Artırma, eksiltme işlemleri

Bunlar ++ ve - işlemleridir. Yani y ++ (artırma), azaltma (-) işlemine benzer şekilde y = y +1'in kısaltmasıdır.

Ancak bu operasyonlarda bir incelik var. İki biçimde gelirler - önek (++ y) ve sonek (y ++). Bu işlemlerin etkisi aynıdır - işlenenlerini 1 arttırırlar (azaltma işlemleri - azaltırlar), ancak sonuçları farklıdır. Sonuç olarak önek formu, işlenenin 1 ile değiştirilmiş değerini verir ve sonek formu, işlenenin değişiklikten önceki değerini verir.

A = 5; x = bir ++; y = ++ bir;

Bu snippet'te x, 5'e ve y 7'ye ayarlanacaktır.

Tamsayı bölme işlemi

Unutulmamalıdır ki, bir bütünü diğerine bölmenin bir bütün ürettiği ve yuvarlama değil, kesirli parçayı attığı akılda tutulmalıdır.

Bölmenin kalanı (modulo değeri)

Java, bir bölümün geri kalanını gösteren % operatörüne sahiptir.

Genişletilmiş atama işlemleri

Java'daki olağan "=" işlemine ek olarak, + =, - =, * =, / =, vb. işlemler vardır. Bunlar kısa gösterimlerdir. Yani a + = b, a = a + b'ye tamamen eşdeğerdir. Benzer şekilde, bu tür diğer işlemlerle.

mantıksal işlemler

! - olumsuzlama && - mantıksal "ve" || - mantıksal "veya"

Bu işlemlerin işlenenleri boole türünde olmalıdır, sonuç boole olur. && ve || bir özelliği vardır - sonuç sol işlenenden zaten biliniyorsa sağ işlenenleri hesaplanamayabilir. Bu nedenle, && işleminin sol işleneni yanlışsa, sağ işlenen hesaplanmayacaktır, çünkü sonuç hala yanlış.

Bu özellik, özellikle doğru işlenen bir işleve çağrı içerdiğinde dikkate alınmalıdır.

Bit düzeyinde mantıksal işlemler

bunlar operasyonlar

& - bit düzeyinde "ve" | - bit düzeyinde "veya" ^ - bit düzeyinde "özel veya" ~ - bit düzeyinde olumsuzlama

İşlenenlerinin her bit çifti için yürütülürler.

Vardiya işlemleri

<< — сдвиг влево >> - sağa kaydır >>> - işaretsiz sağa kaydır

Bu işlemler, sol işlenenin değerini, sağ işlenen tarafından belirtilen bit sayısı kadar kaydırır.

koşullu işlem

Bu, tek üçlü işlemdir, yani. üç işleneni olan bir işlem. Buna göre, bunun için bir değil iki işlem işareti kullanılır.

<условие> ? <выражение1> : < выражение2>

Eğer<условие>doğrudur, o zaman sonuç< выражение1>, aksi halde< выражение2>.

Örneğin, "bir< b ? a: b" вычисляет минимум из a и b.

döküm işlemi

Bu çok önemli bir operasyon. Varsayılan olarak, Java'da sorunlara yol açabilecek tüm dönüşümler yasaktır. Bu nedenle, bir int işlenenine uzun bir değer atayamazsınız. Hala gerekli olduğu durumlarda, açık bir tür dönüşümü sağlamanız gerekir.

Örneğin, f (...) yönteminin long değerini döndürdüğünü varsayalım.

int x = (int) f (10);

Burada (int) bir tür dönüştürme işlemidir. Bir tür dönüştürme işlemi, parantez içindeki tür adıyla belirtilir.

Bu işlem sadece Temel tipler ama aynı zamanda derslere. Miras konusuna baktığımızda buna daha yakından bakacağız.

Değişmezler (sabitler)

Aritmetik

Aritmetik sabitlere örnekler

10 - 010 8 - 0123 83 (1 * 64 + 2 * 8 + 3) - 0x10 16 - 0x123 291 (1 * 256 + 2 * 16 +3) - 1e5 100000 - 1,23 e-3 0,00123

Bir sabitin türünü belirtmek için son ekler kullanılır: l (veya L) - uzun, f (veya F) - kayan nokta, d (veya D) - çift. Örneğin,

1L birdir, ancak türü uzundur.

Boole değişmezleri

Boole değişmezleri doğru ve yanlış

Dize değişmezleri

Şuraya kaydedilir: ikili alıntı, Örneğin

"bu bir dizedir"

Karakter değişmezleri

Kesme işaretleri ile yazılırlar, örneğin "F", "w".

Dize ve karakter değişmezlerinde özel yazma kuralları vardır. karakterler. İlk olarak, önceden tanımlanmış bir dizi özel özellik vardır. karakterler. o

- "\ n" - satır sonu (satır besleme) - "\ r" - satır başı - "\ t" - sekme

ve bir dizi diğerleri.

İkinci olarak, karakter kodunu açıkça yazabilirsiniz (bilmeniz yeterlidir). Kod yazma genellikle yapılır sekizli sistem: "\ 001" - 1 kodlu karakter vb.

İfadeler

Operatör - İfade

Sözdizimi

<выражение>;

Böyle bir operatör, sonunda ";" olan bir ifadeden oluşur. Eylemi, bir ifadenin değerlendirilmesinden oluşur, hesaplanan değer bu ifade kayıp. Onlar. genellikle böyle bir ifade bir atama operatörü içerir, ancak bu sözdizimi tarafından gerekli değildir.

bir = 0; x = (a> b? a: b); cnt++;

Koşullu ifade (eğer)

Sözdizimi

Eğer (<условие>) <оператор1>

Buraya<условие>Mantıksal bir ifadedir, yani. true veya false döndüren bir ifade. Söz diziminden de görebileceğiniz gibi, else kısmı isteğe bağlıdır. if'den sonra ve else'den sonra bir operatör vardır. Oraya birkaç operatör koymanız gerekiyorsa, o zaman koymanız gerekir. engellemek . Engellemek"(" ile başlar ve ")" ile biter.

Java'da if veya else'den sonra bir ifade olsa bile her zaman bir blok koymak gelenekseldir.

If (a> b) (x = a;) else (x = b;) if (flag) (flag = false; init ();)

V son örnek flag bir boole değişkeni veya alanıdır, init (), bayrak doğruysa çağrılan bir yöntemdir ("eğer bayrak ayarlanmışsa" derler).

Return ifadesi (zaten görüldü)

Ön koşula göre döngü operatörü (while)

Sözdizimi

Süre (<условие>) <оператор>

if ifadesinde olduğu gibi, Java'da gelenekseldir<оператор>küme parantezleri içine alın.

Int ben = 0; while (daha fazla) (x / = 2; daha fazla = (++ i< 10); }

Bu örnekte, more bir boole değişkeni veya alanı, x bazı aritmetik değişken veya alan olmalıdır. Döngü 10 kez gerçekleştirilir.

Sonkoşul döngü operatörü (do while)

Sözdizimi

Yapmak<оператор>süre (<условие>);

Son koşula göre döngü operatörü, döngü operatöründen yalnızca döngü yinelemesinin her zaman en az bir kez yürütülmesiyle ön koşulla farklılık gösterirken, ön koşul operatöründe tek bir döngü yinelemesi olmayabilir (koşul hemen yanlışsa).

Int ben = 0; do (x \ = 2; daha fazla = (++ i< 10); } while (more);

Sayaç döngü operatörü (için)

Sözdizimi

İçin (<инициализация>; <условие>; <инкремент>) <оператор>

Böyle bir döngünün başlığı üç ifade içerir (en basit durumda). Operatörün adından, sayaçlı bir döngü düzenlemeye hizmet ettiği anlaşılabilir. Bu nedenle ifade<инициализация>döngünün ilk yinelemesinden önce bir kez yürütülür. Döngünün her yinelemesinden sonra ifade yürütülür.<инкремент>ve sonra ifade<условие>... Son ifade mantıklı olmalıdır ve döngünün devamı için koşulu ayarlamak için kullanılır. Onlar. doğru olduğu sürece, döngü döngüye devam edecektir.

Sayaçlı döngü operatörleri oluşturmanın rahatlığı için, bu yapıda birçok uzantı tanıtılmıştır.

  • <инициализация>bir ifade olmayabilir, ancak "int i = 0" türünde başlatma içeren bir açıklama olabilir.
  • <инициализация>"i = 0, r = 1" gibi virgülle ayrılmış bir ifade listesi olabilir.
  • <инкремент>ifadelerin bir listesi de olabilir, örneğin, "i ++, r * = 2"
  • Tüm bileşenler (<инициализация>, <условие>ve<инкремент>) isteğe bağlıdır. İfade etmek<условие>bu, koşulun her zaman doğru kabul edildiği anlamına gelir (yani, döngüden çıkış, döngünün kendi içinde bir şekilde organize edilmelidir).

Onlar. Diyelim ki aşağıdaki döngü (sonsuz döngü):

İçin (;;) (...)

(int i = 0; i için< 10; i++) x /=2;

Bu, önceki örneklerden en "ekonomik" döngü uygulamasıdır.

İfadeleri kes ve devam et

Java'da goto ifadesi yoktur. Bildiğiniz gibi, goto yapılandırılmamış programlara yol açar. Break ve Continue ifadeleri goto'nun yapılandırılmış analoglarıdır.

Döngülerde kullanılabilirler ve break bir switch ifadesinde de kullanılabilir. break ifadesinin yürütülmesi, döngünün hemen sona ermesine neden olur. Devam ifadesi, döngünün mevcut yinelemesinin sona ermesine ve yeni bir döngünün başlamasına neden olur. Bu durumda, koşul kontrolü hala gerçekleştirilir, bu nedenle devam etmek döngünün sonuna da neden olabilir.

(int i = 0;; i ++) için (if (oddOnly && i% 2 == 0) devam eder; y = (x + 1) / x; if (y - x)< 0.001) break; x = y; }

Burada oddOnly bir boole değişkenidir. Eğer ayarlanırsa, devam deyimi kullanılarak çift sayılı tüm döngü yinelemeleri atlanır;

Döngünün sona ermesi için koşul bu örnek döngünün ortasında kontrol edilir ve yürütülürse, break ifadesi kullanılarak döngü sonlandırılır.

Yuvalanmış döngülerde, break ve Continue ifadeleri yalnızca içinde bulundukları döngüye değil, aynı zamanda çevreleyen döngüye de atıfta bulunabilir. Bunu yapmak için, çevreleyen döngü ifadesi, break veya Continue ifadesinde belirtilmesi gereken bir etiketle işaretlenmelidir. Örneğin,

Lbl: while (...) (... For (...) (... If (...) break lbl;)...)

Burada break ifadesi sonlandırmaya neden olacaktır. döngü için ve süre.

Seçim ifadesi (anahtar)

Birkaç yürütme dalından birinin bazı değerlerine göre bir seçim düzenlemeye hizmet eder.

Sözdizimi

Anahtar (<выражение>) (durum<константа1>: <операторы1>durum<константа2>: <операторы2> . . . }

İfade bir tamsayı döndürmeli veya karakter değeri, sabitler bu ifadenin değeriyle aynı türden olmalıdır.

Vaka öğeleri<константа>: "atlama etiketleridir, ifade değeri bir sabitle çakışıyorsa, bu etikete bir atlama gerçekleştirilir. İfade değeri herhangi bir sabitle eşleşmiyorsa, her şey varsayılan parçanın varlığına bağlıdır. Varsa bir ise, geçiş varsayılan etikete gerçekleşir, değilse switch ifadesinin tamamı atlanır.

  • V geçiş ifadesi vaka parçaları herhangi bir blok oluşturmaz. Verilen dava parçasının son ifadesinden sonra bir sonraki dava varsa, bu dava parçasının ilk ifadesinden başlayarak yürütme devam eder.
  • Bu nedenle, bir switch ifadesinde genellikle bir break ifadesi kullanılır. Her vaka parçasının sonuna yerleştirilir.

Örnek (SymbolTest.java dosyası)

Düşünmek demo programı kullanılan ifadeler için ve geçiş yapın.

Bu program üretir rastgele 100 karakter Latin alfabesi"ünlüler", "ünsüzler" ve "bazen ünlüler" olarak sınıflandırır. Son kategori "y" ve "w" sembollerini içerir.

Genel sınıf SymbolTest (genel static void main (String args) (for (int i = 0; i)< 100; i++) { char c = (char)(Math.random()*26 + "a"); System.out.print(c + ": "); switch (c) { case "a": case "e": case "i": case "o": case "u": System.out.println("гласная"); break; case "y": case "w": System.out.println("иногда гласная"); break; default: System.out.println("согласная"); } } } }

Bu örnekte, bizim için yeni olan birkaç unsur var.

  • Math sınıfının random() metodu kullanılmaktadır. Math sınıfının belgelerine bakalım ve ne yaptığını görelim.
  • char c = (char) ifadesinde (Math.random () * 26 + "a"); aritmetik değer sembole eklenir. Bu ekleme ile Java sembolü bu karakterin koduna eşit bir sayıya dönüştürülür.
  • System.out.print (c + ":") ifadesinde; println (...) değil, print (...) kullanılır. print (...) yöntemi, println (...) yönteminden yalnızca print'e çevirmediği için farklıdır. Yeni hat böylece bir sonraki print (...) veya println (...) ifadesi aynı satırda yazdırmaya devam edecektir.

Ayrıca kasa parçalarına da dikkat etmelisiniz. Resmi olarak, bu tür 7 parça vardır, ancak bunlardan 5'i herhangi bir operatör içermez. Dolayısıyla, 2 vaka parçası olduğunu varsayabiliriz, ancak her birinin birkaç vaka etiketi vardır.

Ödev

  • 1 SymbolTest.java'yı, oluşturulan sembollerin sayısı program çağrı parametresi tarafından ayarlanacak şekilde değiştirin.
  • 2 Çağrı parametresi olarak iki sayı alan bir program yazın - dik açılı bir üçgenin bacaklarının uzunlukları ve sonuç olarak açıları derece olarak yazdırır.


(Yok)

içindeki operatörler Java diliçevirmene bazı işlenenler üzerinde bir işlem yapmak istediğinizi söyleyen özel karakterlerdir. Bazı operatörler bir işlenen gerektirir, bunlara denir tekli. Bazı operatörler, işlenenlerin önüne yerleştirilir ve çağrılır. önek, diğerleri - sonra denir son düzeltme operatörler. Çoğu operatör iki işlenen arasına yerleştirilir, bu tür operatörlere denir. infix ikili operatörler. Üç işlenenle çalışan üçlü bir operatör var.

Java'nın 44 yerleşik operatörü vardır. 4 sınıfa ayrılabilirler - aritmetik, bit düzeyinde, karşılaştırma operatörleri ve zeka oyunu.

Aritmetik operatörler

Aritmetik operatörler, hesaplamalar için cebirde olduğu gibi kullanılır (aritmetik operatörlerin bir özeti için aşağıdaki tabloya bakın). Geçerli işlenenler sayısal türde olmalıdır. Örneğin, Boolean türleriyle çalışmak için bu işleçleri kullanamazsınız, ancak bu işleçleri char türüyle çalışmak için kullanabilirsiniz, çünkü Java'da char türü, int türünün bir alt kümesidir.

Şebeke

Sonuç

Şebeke

Sonuç

Ek

atama ile ekleme

çıkarma (ayrıca tekli eksi)

çıkarma ataması

Çarpma işlemi

çarpma ataması

atama ile bölme

modulo bölümü

modül ataması

artış

azalma

Dört aritmetik işlem

Aşağıda, örnek olarak, operatörlerin kullanımını gösteren basit bir program verilmiştir. Operatörlerin hem tamsayı değişmezleri hem de değişkenlerle çalıştığını unutmayın.

class BasicMath (genel statik boşluk int a = 1 + 1;

intb = bir * 3;

main (Dize argümanları) (

int c = b / 4;

int d = b - a;

int e = -d;

System.out.println ("a =" + a);

System.out.println ("b =" + b);

System.out.println ("c =" + c);

System.out.println ("d =" + d);

System.out.println ("e =" + e);

} }

Bu programı çalıştırarak aşağıdaki çıktıyı almalısınız:

C: \> java BasicMath

bir = 2

b = 6

c = 1

d = 4

e = -4

Modulo operatörü

Modulo operatörü veya mod operatörü, % sembolü ile gösterilir. Bu operatör, birinci işlenenin ikinciye bölümünden kalanını döndürür. C++'dan farklı olarak, Java'daki mod işlevi yalnızca tam sayılarla değil, gerçek türlerle de çalışır. Aşağıdaki program bu operatörün nasıl çalıştığını göstermektedir.

sınıf Modülü (

genel statik boşluk ana (Dize argümanları ) {

int x = 42;

çift ​​y = 42,3;

System.out.println ("x mod 10 =" + x% 10);

System.out.println ("y mod 10 =" + y% 10);

} }

Bu programı çalıştırarak aşağıdaki çıktıyı alacaksınız:

C: \> Modül

x modu 10 = 2

y modu 10 = 2.3

Aritmetik atama operatörleri

her biri için aritmetik operatörler verilen bir işlemle aynı anda bir atamanın gerçekleştirildiği bir form vardır. Aşağıda bu tür bir operatörün kullanımını gösteren bir örnek verilmiştir.

sınıf OpEquals (

int a = 1;

int b = 2;

int c = 3;

bir + = 5;

b* = 4;

c + = bir * b;

% = 6 ile;

} }

Ve işte bu programı çalıştırırken elde edilen sonuç:

C:> Java OpEquals

bir = 6

b = 8

c = 3

Artış ve azalma

C'de, bir işlenenden bir tane eklemek veya çıkarmak için kısayol olan artırma ve eksiltme operatörleri (++ ve -) olarak adlandırılan 2 operatör vardır. Bu operatörler, hem önek hem de sonek formlarında kullanılabilmeleri bakımından benzersizdir. Aşağıdaki örnek, artırma ve azaltma operatörlerinin kullanımını gösterir.

sınıf IncDec (

public static void main (String args) (

int a = 1;

int b = 2;

int c = ++ b;

int d = bir ++;

c++;

System.out.println ("a =" + a);

System.out.println ("b =" + b);

System.out.println ("c =" + c);

} }

Bu programın yürütülmesinin sonucu aşağıdaki gibi olacaktır:

C: \ java IncAralık

bir = 2

b = 3

c = 4

d=1

Tamsayı bitsel operatörler

bütün için sayısal türler data - uzun, int, kısa, karakter ve bayt, tanımlı ek set karşılık gelen değerlerin tek tek bitlerinin durumunu kontrol edebileceğiniz ve değiştirebileceğiniz operatörler. Tablo, bu operatörlerin bir özetini sağlar. Bit aritmetik operatörleri, her bit ile bağımsız bir değer olarak çalışır.

Şebeke

Sonuç

Şebeke

Sonuç

bit düzeyinde tekli olumsuzlama (DEĞİL)

bit düzeyinde VE

bit düzeyinde VE (VE) atama ile

bit düzeyinde VEYA (VEYA)

atama ile bit düzeyinde VEYA (VEYA)

bit düzeyinde özel VEYA (XOR)

atama ile bit düzeyinde özel VEYA (XOR)

sağa kaydır

atama ile sağa kaydırma

sıfırlarla doldurulmuş sağa kaydırma

atama ile sıfırlarla doldurulmuş sağa kaydırma

Sol shift

atama ile sola kaydırma

Bitleri işleyen bir program örneği

Aşağıdaki tablo, bit aritmetik operatörlerinin her birinin işlenenlerinin olası bit kombinasyonlarını nasıl etkilediğini gösterir. Tabloyu takip eden örnek, bu operatörlerin bir Java programında kullanımını göstermektedir.

sınıf Bitlogic (

public static void main (String args) (

Dize ikili = ("OOOO", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011 "," 1100 "," 1101 ",

"1110", "1111" };

int a = 3; // 0 + 2 + 1 veya ikili 0011

int b = 6; // 4 + 2 + 0 veya ikili 0110

int c = bir | B;

int d = a & b;

int e = bir ^ b;

int f = (~ a & b) | (a & ~b);

int g = ~ a & 0x0f;

System.out.println ("a =" + ikili [a]);

System.out.println ("b =" + ikili [b]);

System.out.println ("ab =" + ikili [c]);

System.out.println ("a & b =" + ikili [d]);

System.out.println ("a ^ b =" + ikili [e]);

System.out.рrintln ("~ a & b | a ^ ~ b =" + ikili [f]);

System.out.println ("~ bir = "+ ikili [g]);

} }

Bu programın çıktısı aşağıdadır:

C: \> Java BitLogic

bir = 0011

b = 0110

bir | b = 0111

a ve b = 0010

bir ^ b = 0101

~ a ve b | a & ~ b = 0101

~ bir = 1100

Sağa ve sola kaydırır

Şebeke<< выполняет сдвиг влево всех битов своего левого операнда на число позиций, заданное правым операндом. При этом часть битов в левых разрядах выходит за границы и теряется, а соответствующие правые позиции заполняются нулями. В предыдущей главе уже говорилось об автоматическом повышении типа всего выражения до int в том слу­чае если в выражении присутствуют операнды типа int или целых типов меньшего размера. Если же хотя бы один из операндов в выражении имеет тип long, то и тип всего выражения повышается до long.

>> operatörü Java'da sağa kaydırma anlamına gelir. Sol işlenenin tüm bitlerini sağ işlenen tarafından belirtilen konum sayısı kadar sağa hareket ettirir.Sol işlenenin bitleri en sağdaki kelime konumunun ötesine ilerlediğinde kaybolurlar. Sağa kaydırırken, kaydırılan sayının serbest kalan üst (sol) rakamları, imzalı rakamın önceki içeriğiyle doldurulur. Bu davranışa işaret genişletme denir.

V sonraki program bayt değeri, onaltılık gösterimini içeren bir dizeye dönüştürülür. Dikkat - kaydırılan değer maskelenmelidir, yani işaret genişletmesi sonucunda doldurulan bitleri temizlemek ve değeri indekslerken izin verilen sınırlara düşürmek için mantıksal olarak 0 x0 f değeri ile çarpılmalıdır. onaltılık basamak dizisi.

sınıfHexByte (

karakter altıgen = ("0", "1," 2 "," 3 "," 4 "," 5 "," 6 "," 7 "," 8 "," 9 "," a "," b " , "c", "d", "e", "f);

bayt b = (bayt) 0xf1;

System.out.println (“b = 0x” + altıgen [(b >> 4) & 0x0f] + altıgen);

} }

Bu programın çıktısı aşağıdadır:

C: \> Java HexByte

b = 0xf1

İşaretsiz sağa kaydırma

Sağa kaydırırken, işaret bitinin genişlememesi ve serbest bırakılan sol rakamların basitçe sıfırlarla doldurulması gerekir.

sınıf ByteUShift (

static public void main (String args) (

karakter altıgen = ("0", "1'," 2 "," 3 "," 4 "," 5 "," 6 "," 7 "," 8 "," 9 "," a "," b "," c "," d "," e "," f ');

bayt b = (bayt) 0xf1;

bayt c = (bayt) (b >> 4);

bayt d = (bayt) (b >> 4);

bayt e = (bayt) ((b & 0xff) >> 4);

System.out.println ("b = 0x" + altıgen (b >> 4) & 0x0f] + altıgen);

System.out.println (“b >> 4 = 0x" + altıgen [(c >> 4) & 0x0f] + altıgen);

System.out.println (“b >>> 4 = 0x" + altıgen [(d >> 4) & 0x0f] + altıgen);

System.out.println (“(b & 0xff) >> 4 = 0x" + altıgen [(e >> 4) & 0x0f] + altıgen);

} }

Bu örnek için, b değişkeni isteğe bağlı bir negatif sayı ile başlatılabilir, onaltılık gösterimi 0xf1 olan bir sayı kullandık. c değişkenine, 4 bit sağa işaretli bir b kaydırmasının sonucu atanır. Beklendiği gibi, işaretli bitin genişletilmesi 0xf1'in 0xff olmasına neden olur. Ardından, b'nin 4 bit sağa kaydırılmasının sonucu d değişkenine girilir. Sonuç olarak d'nin 0x0f içermesini bekleyebilirsiniz, ancak gerçekte yine 0xff alırız. Bu, sağa kaydırma işleminden önce b değişkeni otomatik olarak int'ye yükseltildiğinde gerçekleştirilen işaret genişletmesinin sonucudur. Son olarak, e değişkeninin ifadesinde, istenen sonucu elde etmeyi başardık - 0x0f değeri. Bunu yapmak için, sağa kaydırmadan önce, b değişkeninin değerini 0xff maskesiyle mantıksal olarak çarpmamız gerekiyordu, böylece türün otomatik artışı sırasında doldurulan yüksek dereceli bitleri temizledik. AND işleminden sonra işaret bitinin durumunu bildiğimiz için artık işaretsiz sağa kaydırmayı kullanmaya gerek olmadığına dikkat edin.

C: \> Java ByteUShift

b = 0xf1

b >> 4 = 0xff

b >>> 4 = 0xff

b & 0xff) >> 4 = 0x0f

Bit düzeyinde atama operatörleri

Aritmetik işleçlerde olduğu gibi, tüm ikili bitsel işleçler, bir işlemin sonucunun otomatik olarak sol işlenene atanmasına izin veren ilgili bir forma sahiptir. Aşağıdaki örnek, yukarıdaki operatörleri kullanarak çeşitli işlemleri gerçekleştirmek için kullanılan birkaç tamsayı değişkeni oluşturur.

sınıf OpBitEquals (

public static void main (String args) (

int a = 1;

int b = 2;

int c = 3;

bir | = 4;

b >> = 1;

ile birlikte<<= 1;

bir ^ = c;

System.out.println ("a =" + a);

System.out.println ("b =" + b);

System.out.println ("c =" + c);

} }

Program yürütme sonuçları aşağıdaki gibidir:

C: \> Java OpBitEquals

bir = 3

b = 1

c = 6

ilişkisel operatörler

İki değeri karşılaştırabilmek için Java, ilişki ve eşitliği tanımlayan bir dizi operatöre sahiptir. Bu operatörlerin listesi tabloda verilmiştir.

Şebeke

Sonuç

daha fazla veya eşit

küçük veya eşit

Tamsayılar, gerçek sayılar, semboller, boole'ler ve referanslar dahil olmak üzere her türden değer, eşitlik operatörü == ve eşitsizlik operatörü! = kullanılarak karşılaştırılabilir. Lütfen Java'da, C ve C ++'da olduğu gibi, eşitlik testinin (==) dizisiyle gösterildiğine dikkat edin. Bir işaret (=) atama operatörüdür.

Boole'ler mantıksal operatörler

Aşağıdaki tabloda özetlenen Boole mantıksal işleçleri, yalnızca boolean işlenenlerinde çalışır. Tüm ikili mantıksal operatörler, işlenen olarak iki boole değerini kabul eder ve aynı türü döndürür.

Şebeke

Sonuç

Şebeke

Sonuç

mantıksal VE (VE)

VE (VE) atama ile

mantıksal VEYA (VEYA)

VEYA (VEYA) atama ile

mantıksal özel VEYA (XOR)

atama ile özel VEYA (XOR)

ifadelerin hızlı değerlendirmesinin VEYA operatörü ( kısa devre VEYA)

kısa devre VE operatörü

mantıksal tekli olumsuzlama (DEĞİL)

üçlü operatör if-then-else

Mantıksal operatörlerin işlenenlerin değerlerinin çeşitli kombinasyonları üzerindeki etkisinin sonuçları tabloda gösterilmektedir.

Aşağıdaki program zaten bildiğiniz BitLogic örneğini neredeyse tamamen tekrarlıyor. Ancak bu sefer boolean booleanlarla çalışıyoruz.

sınıf BoolLogic (

public static void main (String args) (

boolean a = doğru;

boolean b = yanlış;

boole c = a | B;

boole d = a & b;

boolean e = a ^ b;

boolean f = (! a & b) | (a &!b);

boolean g =!a;

System.out.println ("a =" + a);

System.out.println ("b =" + B);

System.out.println ("a | b =" + c);

System.out.println ("a & b =" + d);

System.out.println ("a ^ b =" + e);

System.out.println ("! A & b | a &! B =" + f);

System.out.println ("! A =" + g);

} }

C: \> Java BoolLogic

bir = doğru

b = yanlış

a | b = doğru

a & b = yanlış

a ^ b = doğru

! a & b | a &! b = doğru

!a = yanlış

Kısa devre mantıksal operatörler

Boolean operatör paketine iki ilginç ekleme var. Bunlar, mantıksal ifadeleri hızlı bir şekilde değerlendirmek için AND ve OR operatörlerinin alternatif sürümleridir. Bir VEYA operatörünün ilk işleneni doğruysa, ikinci işlenenin değeri ne olursa olsun, işlemin sonucunun doğru olduğunu bilirsiniz. Benzer şekilde, AND operatörü durumunda, ilk işlenen yanlışsa, ikinci işlenenin değeri sonucu etkilemez - her zaman yanlış olacaktır. && ve || onun yerine geleneksel formlar& ve | ise, cevap sol işlenenin değerinden açıksa, Java mantıksal ifadenin sağ işlenenini değerlendirmez. && ve || hemen hemen tüm durumlarda, Boole mantıksal ifadelerini değerlendirmek. Bu operatörlerin sürümleri & ve | sadece bit aritmetiği için geçerlidir.

Üçlü operatör if-then-else

if-then-use ifadesinin genel biçimi aşağıdaki gibidir:

ifade1? ifade2: ifade3

İlk işlenen olarak - "ifade1" - sonucu bir boole değeri olan herhangi bir ifade kullanılabilir. Sonuç doğruysa, ikinci işlenen tarafından belirtilen operatör, yani "ifade2" yürütülür. İlk işlenen yanlışsa, üçüncü işlenen yürütülür - "ifade3". İkinci ve üçüncü işlenenler, yani ifade2 ve ifade3, aynı türde değerler döndürmeli ve geçersiz olmamalıdır.

Aşağıdaki program, bölme işlemini gerçekleştirmeden önce böleni test etmek için bu operatörü kullanır. Sıfır bölen olması durumunda 0 değeri döndürülür.

sınıf Üçlü (

public static void main (String args) (

int a = 42;

int b = 2;

int c = 99;

int d = 0;

int e = (b == 0)? 0: (a / b);

int f = (d == 0)? 0: (c / d);

System.out.println ("a =" + a);

System.out.println ("b =" + b);

System.out.println ("c =" + c);

System.out.println ("d =" + d);

System.out.println ("a / b =" + e);

System.out.println ("c / d =" + f);

} }

Bu program, sıfır istisna ile bir bölme oluşturmaz ve aşağıdaki sonuçları verir:

C: \> Java Üçlü

bir = 42

b = 2

c = 99

d = 0

a / b = 21

s / d = 0

Operatör Öncelikleri

Java'nın belirli bir işlem sırası veya önceliği vardır. Temel cebirde, çarpma ve bölmenin toplama ve çıkarmadan daha yüksek önceliğe sahip olduğu öğretildi. Programlamada, operasyonların önceliklerini de takip etmeniz gerekiyor. Tablo, tüm Java dili işlemlerinin önceliklerini azalan sırada listeler.

Tablonun ilk satırı, henüz bahsetmediğimiz üç olağandışı operatörü listeler. Parantezler () önceliği açıkça ayarlamak için kullanılır. Önceki bölümde öğrendiğiniz gibi, bir dizi değişkenini indekslemek için köşeli parantezler kullanılır. Şebeke. (nokta) öğeleri bir nesne referansından ayırmak için kullanılır - bundan Bölüm 7'de bahsedeceğiz. Diğer tüm operatörler bu bölümde zaten tartışılmıştır.

Açık öncelikler

Parantezler en yüksek önceliğe sahip olduğundan, değerlendirme sırası hakkında şüpheleriniz varsa veya yalnızca kodunuzu daha okunabilir hale getirmek istiyorsanız, bir ifadeye her zaman birden çok parantez çifti ekleyebilirsiniz.

a >> b + 3

İlk satır a >> (b + 3) veya (a >> b) + 3 ifadelerinden hangisiyle eşleşiyor? Toplama operatörü, shift operatöründen daha yüksek önceliğe sahip olduğundan, doğru cevap a >> (b + a). Yani bir işlem yapmanız gerekiyorsa (a >> b )+ 3 parantezler vazgeçilmezdir.

Bu nedenle, Java dilinde her türlü operatörü ele aldık. Artık herhangi bir ifade oluşturabilirsiniz farklı veri türleri ile... Bir sonraki bölümde, dallanma yapıları, döngü oluşturma ve program yürütmenin nasıl kontrol edileceği hakkında bilgi edineceğiz.

Çoğu işlem açık ilkel tipler yöntemlerle değil, özel karakterler aranan operasyon işareti.

atama işlemi

Bir değişkene bir sabitin, başka bir değişkenin veya bir ifadenin (işlem işaretleri ile ayrılmış değişkenler ve/veya sabitler) değerinin atanmasına denir. atama işlemi ve işaretiyle gösterilir " = ", örneğin: x = 3; y = x; z = x; Java'da atama işlemini tek bir ifadede yeniden kullanmak mümkündür, örneğin: x1 = x2 = x3 = 0; Bu işlem sağdan sağa doğru yapılır. yani, önce x3 değişkenine 0 değeri, ardından x2 değişkenine x3 (0) değişkeninin değeri ve son olarak x1 değişkenine x2 (0) değişkeninin değeri atanır. argümanları sayı olan işlem işaretleri iki kategoriye ayrılır: tekli(tek) bir argümanla işlem belirteçleri ve ikili(ikili) iki argümanla.

tekli işlemler

Aşağıdaki tekli işlemler Java'da tanımlanmıştır:
  • tekli eksi "-" - bir sayının veya ifadenin işaretini tersine değiştirir;
  • tekli artı "+" - bir sayı veya ifade üzerinde herhangi bir işlem yapmaz;
  • bitsel tamamlayıcı "~" (yalnızca tamsayılar için) - sayı alanının tüm bitlerini tersine çevirir (0'dan 1'e ve 1'den 0'a değişir);
  • artış "++" (yalnızca tamsayılar için) - değişkenin değerini 1 artırır;
  • azaltma "-" (yalnızca tamsayılar için) - değişkenin değerini 1 azaltır.
"+" ve "-" tekli işlem örnekleri: int i = 3, j, k; j = - ben; // j = -3 k = + ben; // k = 3 Bir bitsel tümleme işlemi örneği: int a = 15; int b; b = ~a; // b = -16 a ve b sayıları int, yani dahili olarak 32 bit işaretli ikili tamsayılar olarak temsil edilirler, bu nedenle a ve b'nin ikili gösterimi şöyle görünecektir Aşağıdaki şekilde: a = 00000000 00000000 00000000 00001111 b = 11111111 11111111 11111111 11110000 Bu gösterimden de görebileceğiniz gibi, a sayısındaki tüm sıfır bitler b sayısındakilere ve a'dakiler sıfır bitlere değiştirilir. b'nin ondalık gösterimi –16'dır. Artırma ve eksiltme işlemi işaretleri değişkenden önce veya sonra yerleştirilebilir. Bu seçenekler buna göre adlandırılır önek ve son düzeltme Bu işlemleri kaydederek. Ön ek gösterimindeki operatör işareti, işlenenin değerini döndürür sonrasında bir ifadenin değerlendirilmesi. Postfix gösterimi için işlem işareti Başta işlenenin değerini döndürür ve ancak bundan sonra artış veya azalmayı hesaplar, örneğin: int x = 1, y, z; y = ++ x; z = x ++; y değişkenine 2 değeri atanacaktır, çünkü önce x'in değeri 1 artırılacak ve ardından sonuç y değişkenine atanacaktır. z değişkenine 1 değeri atanacaktır, çünkü önce z değişkenine bir değer atanacak ve ardından x'in değeri 1 artırılacaktır. Her iki durumda da x'in yeni değeri 2 olacaktır. Java'da, C'den farklı olarak, azaltma ve artırma işlemlerinin gerçek değişkenlere uygulanabileceğine dikkat edilmelidir ( batmadan yüzmek ve çift). İkili işlem işaretleri sayısal sonuç içeren işlemlere ve sonucu bir boole değeri olan karşılaştırma işlemlerine bölünür.

Aritmetik İkili İşlemler

Java aşağıdakileri tanımlar aritmetik ikili işlemler:
  • "+" ekleme;
  • çıkarma "-";
  • çarpma işlemi " * ";
  • Bölüm "/";
  • "%" tamsayılarının kalanını hesaplama (ilk sayıyı ikinciye bölmenin kalanını verir ve sonuç temettü ile aynı işarete sahip olur), örneğin, %5 3 işleminin sonucu 2 olur ve (-7) % (- 4) işleminin sonucu -3 olacaktır. V Java işlemi gerçek değişkenler için kullanılabilir (float veya double).
İkili aritmetik işlemlere örnekler: int x = 7, x1, x2, x3, x4, x5; x1 = x + 10; // x1 = 17 x2 = x - 8; // x2 = -1 x3 = x2 * x; // x3 = -7 x4 = x / 4; // x4 = 1 (tam sayıları bölerken // kesirli kısım atılan) x5 = x%4 // x5 = 3 (bölmenin kalan kısmı// 7'ye 4)

Bit düzeyinde işlemler

  • Bitsel işlemler orijinali dikkate alır Sayısal değerler bit alanları olarak ve bunlar üzerinde aşağıdaki işlemleri gerçekleştirin:
  • biti ayarlamak ben Her iki bit de içindeyse, sonuç alanının -th konumu 1'e ben- işlenenlerin konumları 1'e veya 0'a eşittir, aksi takdirde - bitsel AND ("&");
  • biti ayarlamak ben En az bir bit içerideyse, sonuç alanının -th pozisyonu 1'e ben- işlenenlerin konumları 1'e veya 0'a eşittir, aksi takdirde - bitsel VEYA ("|");
  • biti ayarlamak ben içindeki bitler varsa, sonuç alanının -th konumu 1'e ben- işlenenlerin konumları birbirine veya 0'a eşit değildir, aksi takdirde - bit düzeyinde özel VEYA ("^");
  • ilk işlenenin alanının bitlerinin ikinci işlenen tarafından belirlenen bit sayısına göre sola kayması (bu durumda sayının işaret biti değişmez) - işareti dikkate alarak bitsel sola kaydırma "<< ";
  • ikinci işlenen tarafından belirlenen bit sayısına göre ilk işlenen alanının bitlerinin sağına kaydırma (bu durumda sayının işaret biti değişmez) - " >>" işareti;
  • ikinci işlenen tarafından belirlenen bit sayısına göre birinci işlenen alanının bitlerinin sağına kaydırma (bu durumda sayının işaret biti de kaydırılır) - " >>>" işareti.
Bit düzeyinde işlem örnekleri:
  1. Bit düzeyinde VE

    int x = 112; int y = 94; int z; z = x & y; // z = 80: 00000000 00000000 00000000 01010000
  2. Bit düzeyinde VEYA

    int x = 112; // x: 00000000 00000000 00000000 01110000 int y = 94; // y: 00000000 00000000 00000000 01011110 int z; z = x | y; // z = 126: 00000000 00000000 00000000 01111110
  3. Bit düzeyinde özel VEYA

    int x = 112; // x: 00000000 00000000 00000000 01110000 int y = 94; // y: 00000000 00000000 00000000 01011110 int z; z = x ^ y; // z = 46: 00000000 00000000 00000000 00101110
  4. İşareti dikkate alarak sola kaydırın

    int x = 31, z; // x: 00000000 00000000 00000000 00011111 z = x<< 2 ; // z = 124: 00000000 00000000 00000000 01111100
  5. İşareti dikkate alarak sağa kaydırın

    int x = - 17, z; z = x >> 2; // z = -5: 11111111 11111111 11111111 11111011
  6. İmzadan bağımsız olarak sağa kaydır

    int x = - 17, z; // x: 11111111 11111111 11111111 11101111 z = x >>> 2; // z = 1073741819 // z: 00111111 11111111 11111111 11111011

birleşik operasyonlar

Java'da ikili aritmetik işlemler için şunları kullanabilirsiniz: kombine(bileşik) işlem işaretleri: tanımlayıcı işlem = ifade Bu, aşağıdaki işleme eşdeğerdir: tanımlayıcı = tanımlayıcı işlem ifadesi Örnekler:
  1. x + = b ifadesi, x = x + b anlamına gelir.
  2. x - = b ifadesi, x = x - b anlamına gelir.
  3. x * = b ifadesi, x = x * b anlamına gelir.
  4. x / = b ifadesi, x = x / b anlamına gelir.
  5. x% = b ifadesi, x = x% b anlamına gelir.
  6. x & = b ifadesi, x = x & b anlamına gelir.
  7. x | = b ifadesi, x = x | B.
  8. x ^ = b ifadesi, x = x ^ b anlamına gelir.
  9. x ifadesi<<= b означает x = x << b .
  10. x >> = b ifadesi, x = x >> b anlamına gelir.
  11. x >>> = b ifadesi, x = x >>> b anlamına gelir.

Karşılaştırma işlemleri

Java, aşağıdaki karşılaştırma operatörlerini tanımlar:
  • "==" (eşit), "! =" (eşit değil),
  • ">" (büyüktür), "> =" (büyük veya eşit),
  • " < " (меньше) " <= " (меньше или равно)
iki işlenene sahip olun ve karşılaştırmanın sonucuna karşılık gelen bir boole değeri döndürün ( YANLIŞ veya NS). Lütfen Java'da eşitlik için iki değeri karşılaştırırken, C ve C ++ 'da olduğu gibi, sembollerin " == "(boşluksuz iki eşittir işareti)," = ". İki değeri karşılaştırırken" = "sembolünün kullanılması ya bir derleme hatasına neden olur ya da yanlış bir sonuç verir. Karşılaştırma işlemlerine örnekler: boolean Eşittir, Eşit Değildir, Daha Büyük, Daha BüyükOrEqual, Daha Az, Daha AzVeyaEşit; int x1 = 5, x2 = 5, x3 = 3, x4 = 7; eşittir = x1 == x2; // isEqual = true isNonEqual = x1! = x2; // isNonEqual = false isGreater = x1> x3; // isGreater = true // isGreaterOrEqual = true isGreaterOrEqual = x2> = x3; Daha Az = x3< x1; // isLess = true isLessOrEqual = x1 <= x3; // isLessOrEqual = false

Boole işlemleri

Boole işlemleri boole değişkenlerinde yürütülür ve sonuçları da bir tür değeridir boole... Aşağıdaki boole işlemleri Java'da tanımlanmıştır:
  • olumsuzlama "!" - yanlışı doğru ile değiştirmek veya tam tersi;
  • AND işlemi "&" - sonuç yalnızca her iki işlenen de doğruysa doğrudur, aksi takdirde sonuç yanlıştır;
  • VEYA "|" işlemi - yalnızca işlenenlerden en az biri doğruysa sonuç doğrudur, aksi takdirde sonuç yanlıştır.
  • XOR işlemi "^" - sonuç yalnızca işlenenler birbirine eşit değilse doğrudur, aksi takdirde sonuç yanlıştır.
"&", "|" ve "^" işleçleri ve bunlara karşılık gelen bit düzeyinde işleçler bileşik atama işleçlerinde kullanılabilir: "& =", "| =" ve "^ =" Ayrıca, işlemler " = Boolean işlenenlere uygulanabilir. = "(eşit) ve"! = "(eşit değil). VEYA ve VE'nin tanımından da görebileceğiniz gibi, VEYA işlemi, ikinci işlenenin değerinden bağımsız olarak ilk işlenen doğru olduğunda doğru olarak değerlendirilir ve ilk işlenenin değeri ne olursa olsun, VE işleci yanlış olarak değerlendirir. ikinci işlenenin değeri. Java iki boole işlemi daha tanımlar: kısa devre mantıksal işlemleri olarak bilinen AND ve OR boolean'ın ikinci versiyonu: kısa AND "&&" ve kısa OR "||". Bu işlemleri kullanırken, ikinci işlenen hiç değerlendirilmeyecektir; bu, sağ işlenenin doğru çalışmasının sol işlenenin doğru veya yanlış olmasına bağlı olduğu durumlarda yararlıdır. Boole işlemlerine örnekler: boole değeriRange isInRange, isGeçerli, isNotValid, isEqual, isNotEqual; int x = 8; isInRange = x> 0 && x< 5 ; // isInRange = false isValid = x >0 || x> 5; // isValid = true isNotValid =! geçerli; // isNotValid = yanlış isEqual = isInRange == isValid; // isEqual = false // isNotEqual = true isNotEqual = isInRange! = isValid

koşullu işlem

İfade-1? İfade-2: İfade-3 biçiminde bir koşullu işlem yazılır. Bu durumda, ilk olarak bir boole değeri vermesi gereken ifade-1 ifadesi değerlendirilir ve ardından ifade-1 doğruysa, ifade-2 değerlendirilir ve işlemin sonucu olarak döndürülür, veya (ifade-1 ise false) ve işlemin sonucu olarak ifade-3 döndürülür. Koşullu işleme bir örnek: x = n> 1? 0:1; x değişkenine, n> 1 ise 0 (n> 1 ifadesi doğru olarak değerlendirilir) veya n≤1 ise 1 (n> 1 ifadesi yanlış olarak değerlendirilir) atanır.

operasyonların kıdem

İfadelerdeki işlemler, önceliklerine göre soldan sağa doğru yapılır. Yani çarpma işlemi y = x + z * 5 ifadesinde; çarpma işleminin önceliği toplama işleminin önceliğinden daha yüksek olduğu için toplama işleminden önce yürütülecektir. Java'daki işlem öncelikleri (azalan öncelik sırasına göre) Tablo'da gösterilmiştir. 1.
Parantezler, içlerindeki işlemlerin önceliğini artırır. Yani yukarıdaki ifadeye parantez eklerseniz: y = (x + z) * 5; daha sonra önce toplama işlemi, ardından çarpma işlemi yapılacaktır. Bazen parantezler ifadeyi daha okunaklı kılmak için kullanılır, örneğin: (x> 1) && (x<= 5 ) ;

İşlemleri gerçekleştirirken tür dönüştürme ve yayınlama

Atama ve aritmetik ifadelerde, değişmez değerler, değişkenler ve farklı türdeki ifadeler kullanılabilir, örneğin: double y; bayt x; y = x + 5; Bu örnek, bayt değişkeni x'i değişmez 5'e (int) ekler ve sonucu çift değişken y'ye atar. Java'da, C dilinde olduğu gibi, ifadelerin değerlendirilmesinde tür dönüşümleri otomatik olarak veya bir döküm operatörü kullanılarak gerçekleştirilebilir. Ancak, döküm kuralları C dilinden biraz farklıdır ve genel olarak C dilinden daha katıdır.Bir atama işlemi gerçekleştirirken, aşağıdaki durumlarda tür dönüşümü otomatik olarak gerçekleşir. genişleyen dönüşüm(genişletme dönüştürme) ve iki tip uyumludur... Genişleyen dönüşümler dönüşümlerdir bayt® kısa boylu® int® uzun® batmadan yüzmek® çift... Dönüşümleri genişletmek için tamsayı ve kayan nokta dahil sayısal türler birbiriyle uyumludur. Ancak, sayısal türler char ve boolean türleriyle uyumlu değildir. char ve boolean türleri de birbiriyle uyumlu değildir. Java ayrıca, bir hazır bilgi tamsayı sabitini (varsayılan olarak int olan) byte, short veya long türündeki değişkenlerde depolarken otomatik tür dönüştürme gerçekleştirir (ancak, hazır bilgi bu tür için geçerli değerler aralığının dışında bir değere sahipse, bir hata mesajı görüntülenir: olası doğruluk kaybı). Dönüştürme daraltıcı bir dönüştürme ise, yani bayt ¬ kısa ¬ ¬ char ¬ int ¬ uzun ¬ float ¬ double gerçekleştiriliyorsa, böyle bir dönüştürme kesinlik kaybına veya sayının bozulmasına neden olabilir. Bu nedenle, daraltma dönüşümleriyle, program derlendiğinde, tür uyumsuzluğu hakkında bir tanılama mesajı görüntülenir ve sınıf dosyaları oluşturulmaz. Böyle bir mesaj, bayt veya kısa türündeki ifadeleri char türünde bir değişkene dönüştürmeye çalışırken de görüntülenecektir. Yine de bu tür dönüştürmelerin yapılması gerekiyorsa, aşağıdaki formata sahip bir yayınlama işlemi kullanılır: ( dönüşüm türü) anlam, nerede dönüşüm türü verilenin dönüştürüleceği türü tanımlar anlam, örneğin, operatörlerin yürütülmesinin bir sonucu olarak: byte x = 71; karakter sembolü = (karakter) x; sembol değişkeni "G" olarak ayarlanacaktır. Bir tamsayı türüne bir kayan nokta değeri atanırsa, (kayan nokta değerinin bir kesirli kısmı varsa), açık bir tür dönüşümü de gerçekleşir. kesme(kesme) sayılar. Böylece, operatörünün yürütülmesi sonucunda int x = (int) 77.85; x değişkeni 77 olarak ayarlanacaktır. Atanan değer aralık dışındaysa tip-dönüşümler , daha sonra dönüştürmenin sonucu, değeri atanan türün aralığının modülüne bölmenin geri kalanı olacaktır (tür bayt sayıları için, aralığın modülü 256, kısaca - 65536, int - 4294967296 için olacaktır) , ve uzun - 18446744073709551616). Örneğin byte x = (byte) 514 ifadesinin sonucu olarak; x değişkeni 2 olarak ayarlanacaktır. Tam sayıları veya gerçek sayıları char türündeki verilere dönüştürürken, orijinal sayı 0 ile 127 arasındaysa karaktere dönüştürme gerçekleşir, aksi takdirde karakter "?" değerini alır. Aritmetik ve bit düzeyinde dönüştürmeler gerçekleştirirken, tüm bayt ve kısa değerler ile char, int'ye genişletilir (karakter kodunun sayısal değeri char için hesaplamalarda kullanılırken), bu durumda, en az bir işlenen uzun türündeyse , tamsayı ifadesinin türü uzun olacak şekilde genişletilir. İşlenenlerden biri float türündeyse, tam ifadenin türü float olarak genişletilir ve işlenenlerden biri double türündeyse, sonucun türü double olur. Bu nedenle, değişkenler bayt a, c olarak bildirilirse; kısa b; daha sonra a + b * c - 15 L + 1.5F + 1.08 - 10 ifadesinde; önce a + b * c hesaplamadan önce değişkenlerin değerleri int'ye genişletilecek, daha sonra sabit 15 uzun türünde olduğundan, hesaplamanın sonucu çıkarmadan çok önce artırılacaktır. Bundan sonra, 1.5 değişmezi float türünde olduğundan, a + b * c - 15L hesaplamasının sonucu, bu değişmeze eklenmeden önce float olarak genişletilecektir. 1.08 sayısıyla toplama işlemi yapılmadan önce, önceki hesaplamaların sonucu ikiye genişletilecektir (çünkü gerçek sabitler varsayılan olarak double türündedir) ve son olarak, son eklemeyi gerçekleştirmeden önce, değişmez 10 (varsayılan olarak int) olacaktır. ikiye katlanarak genişletildi. Böylece, ifadenin değerlendirilmesinin sonucu double türünde olacaktır. Otomatik tür uzantıları (özellikle int'ye kısa ve bayt uzantıları) yetersiz tanınan derleme zamanı hatalarına neden olabilir. Örneğin operatörlerde: byte x = 30, y = 5; x = x + y; ekleme yapılmadan önce, x ve y değişkenlerinin değeri int'ye genişletilecek ve ardından int türünde bir hesaplamanın sonucunu byte türünde bir değişkene atamaya çalışırken bir hata mesajı görüntülenecektir. Bundan kaçınmak için ikinci operatörde açık bir tür dönüşümü kullanmak gereklidir: x = (byte) (x + y); x + y ifadesini parantez içine almalısınız, çünkü parantez içine alınmış döküm işleminin önceliği toplama işleminin önceliğinden daha yüksektir. Bu arada ikinci operatörü şöyle yazarsanız: x + = y; sonra hata mesajı olmayacaktır. İlk bağlantı

Java, değişkenleri işlemek için zengin bir operatör seti sağlar. Tüm Java operatörleri aşağıdaki gruplara ayrılabilir:

  • aritmetik operatörler;
  • karşılaştırma operatörleri;
  • bitsel operatörler;
  • mantıksal operatörler;
  • atama operatörleri;
  • diğer operatörler.

Aritmetik operatörler

Aritmetik operatörler- cebirde kullanıldığı gibi matematiksel ifadelerde de kullanılırlar. A tamsayı değişkeninin 10 ve B değişkeninin 20 olduğunu varsayalım. Aşağıdaki tablo Java'daki aritmetik operatörleri listeler:

Örnek

Aşağıdaki basit örnek, programlı olarak aritmetik operatörleri gösterir. Aşağıdaki java kodunu kopyalayıp test.java dosyasına yapıştırın, bu programı derleyin ve çalıştırın:

Genel sınıf Testi (public static void main (String args) (int a = 10; int b = 20; int c = 25; int d = 25; System.out.println ("a + b =" + (a + b) )); System.out.println ("a - b =" + (a - b)); System.out.println ("a * b =" + (a * b)); System.out.println (" b / a = "+ (b / a)); System.out.println ("b% a = "+ (b% a)); System.out.println (" c% a = "+ (c% a) )); System.out.println ("a ++ =" + (a ++)); System.out.println ("b-- =" + (a--)); // d'deki farkı kontrol edin ++ ve ++ d System .out.println ("d ++ =" + (d ++)); System.out.println ("++ d =" + (++ d));))

A + b = 30 a - b = -10 a * b = 200 b / a = 2 b% a = 0 c% a = 5 a ++ = 10 b-- = 11 d ++ = 25 ++ d = 27

Karşılaştırma Operatörleri

Aşağıdaki karşılaştırma operatörleri Java dilinde desteklenmektedir. A değişkeninin 10 ve B değişkeninin 20 olduğunu varsayalım. Aşağıdaki tablo Java'daki ilişkisel veya karşılaştırma operatörlerini listeler:

ŞebekeAçıklamaÖrnek
== İki işlenenin değerlerinin eşit olup olmadığını kontrol eder, evet ise koşul doğru olur(A == B) - doğru değil
!= İki işlenenin değerlerinin eşit olup olmadığını kontrol eder, değerler eşit değilse koşul doğru olur(A! = B) - değer doğru
> Sol işlenenin değerinin sağ işlenenin değerinden büyük olup olmadığını kontrol eder, evet ise koşul doğru olur(A> B) - doğru değil
Sol işlenenin değerinin sağ işlenenin değerinden küçük olup olmadığını kontrol eder, evet ise koşul doğru olur(A
>= Sol işlenenin değerinin sağ işlenenin değerinden büyük veya eşit olup olmadığını kontrol eder, evet ise koşul doğru olur(A> = B) - değerler doğru değil
Sol işlenenin değerinin sağ işlenenin değerinden küçük veya eşit olup olmadığını kontrol eder, evet ise koşul doğru olur(A

Örnek

Aşağıdaki basit örnek, Java'daki karşılaştırma operatörlerini programlı olarak gösterir. Aşağıdaki java kodunu kopyalayıp test.java dosyanıza yapıştırın, bu programı derleyin ve çalıştırın:

Genel sınıf Testi (genel static void main (String args) (int a = 10; int b = 20; System.out.println ("a == b =" + (a == b)); System.out.println ("a! = b =" + (a! = b)); System.out.println ("a> b =" + (a> b)); System.out.println ("a = a =" + (b> = a)); System.out.println ("b"

A == b = yanlış a! = B = doğru a> b = yanlış a = a = doğru b

bitsel operatörler

Java, tamsayı türlerine uygulanabilecek birkaç bit düzeyinde operatör tanımlar: int, long, short, char ve byte. Java'da bitsel operatör, bitler üzerinde çalışır ve işlemi parça parça gerçekleştirir. a = 60 ise; ve b = 13; daha sonra ikili olarak aşağıdaki gibi olacaktır:

bir = 0011 1100
b = 0000 1101
-----------------
a & b = 0000 1100
a | b = 0011 1101
bir ^ b = 0011 0001
~ bir = 1100 0011

A tamsayı değişkeninin 60 ve B değişkeninin 13 olduğunu varsayalım. Aşağıdaki tablo Java'daki bitsel operatörleri listeler:

ŞebekeAçıklamaÖrnek
& (bit düzeyinde ve)İkili AND operatörü, her iki işlenende de varsa, sonuca biraz kopyalar.(A & B) 0000 1100 olan 12'yi verecektir.
| (bitsel veya)İkili VEYA operatörü, işlenenlerden herhangi birinde varsa, biraz kopyalar.(A | B) 0011 1101 olan 61'i verecektir.
^ (bit düzeyinde boole veya)İkili XOR operatörü, bir işlenende ayarlanmışsa, ancak her ikisinde de değilse biraz kopyalar.(A ^ B) 0011 0001 olan 49'u verecektir.
~ (bit düzeyinde tamamlayıcı)Binary'nin tamamlayıcı operatörüdür ve bitleri "çevirme" etkisine sahiptir.(~ A) ikili gösterimde 1100 0011'in tümleyen formu olan -61'i verecektir.
İkili sola kaydırma operatörü. Sol işlenenlerin değeri, sağ işlenen tarafından belirtilen bit sayısı kadar sola taşınır.A
>> (sağa kaydır)İkili sağa kaydırma operatörü. Sağ işlenenlerin değeri, sol işlenen tarafından belirtilen bit sayısı kadar sağa taşınır.A >> 2, 1111 olan 15'i verecektir.
>>> (sağa sıfır kaydırma)Sıfır sağa kaydırma operatörü. Sol işlenenlerin değeri, sağ işlenen tarafından belirtilen bit sayısı kadar sağa taşınır ve kaydırılan değerler sıfırlarla doldurulur.A >>> 2, 0000 1111 olan 15'i verecektir.

Örnek

Aşağıdaki basit örnek, Java'da programlı olarak bitsel operatörleri gösterir. Aşağıdaki java kodunu kopyalayıp test.java dosyanıza yapıştırın, bu programı derleyin ve çalıştırın:

Genel sınıf Testi (genel static void main (String args) (int a = 60; / * 60 = 0011 1100 * / int b = 13; / * 13 = 0000 1101 * / int c = 0; c = a & b; / * 12 = 0000 1100 * / System.out.println ("a & b =" + c); c = a | b; / * 61 = 0011 1101 * / System.out.println ("a | b =" + c); c = a ^ b; / * 49 = 0011 0001 * / System.out.println ("a ^ b =" + c); c = ~ a; / * - 61 = 1100 0011 * / Sistem. out.println ("~ a =" + c); c = a> 2; / * 215 = 1111 * / System.out.println ("a >> 2 =" + c); c = bir >>> 2 ; / * 215 = 0000 1111 * / System.out.println ("a >>> 2 =" + c);))

Aşağıdaki çıktıyı alacaksınız:

A & b = 12 a | b = 61 a ^ b = 49 ~ a = -61 a> 15 a >>> 15

Mantıksal operatörler

Boole değişkeni A'nın doğru olduğunu ve B değişkeninin yanlış olduğunu varsayalım. Aşağıdaki tablo, Java'daki mantıksal işleçleri listeler:

Örnek

Genel sınıf Testi (genel static void main (String args) (boolean a = true; boolean b = false; System.out.println ("a && b =" + (a && b)); System.out.println (" a | | b = "+ (a || b)); System.out.println ("! (a && b) = "+! (a && b));))

Bu, aşağıdaki çıktıyı üretecektir:

A && b = yanlış a || b = doğru! (a && b) = doğru

atama operatörleri

Aşağıdaki atama operatörleri Java dili tarafından desteklenir:

Şebeke Açıklama Örnek
= Basit atama operatörü, işlenenlerin sağ tarafından sol tarafına değerler atar C = A + B, A + B'nin değerini C'ye atayacaktır
+= Atama operatörü "Ekle", sol işlenene sağın değerlerini atar. C + = A, C = C + A'ya eşdeğer
-= Atama operatörü "Çıkarma", sağ işlenenden sol işlenenden çıkarır C - = A, C = C - A'ya eşdeğer
*= Atama operatörü "Çarpma", sağ işleneni sol işlenenle çarpar C * = A, C = C * A'ya eşittir
/= Atama operatörü "Bölüm", sol işleneni sağ işlenene böler C / = A, C = C / A'ya eşittir
%= "Modül" atama operatörü, iki işlenen kullanan bir modül alır ve sonucunu sol işlenene atar. %C = A, C = %C A'ya eşdeğer
Sola kaydırma atama operatörü C
>>= Sağa kaydırma atama operatörü C >> = 2, C = C >> 2 gibi
&= Bit düzeyinde VE atama operatörü C & = 2, C = C & 2 gibi
^= Bit düzeyinde özel "VEYA" atama operatörü ("XOR") C ^ = 2, C = C ^ 2 gibi
|= Bit düzeyinde VEYA (VEYA) atama operatörü C | = 2, C = C | 2

Örnek

Aşağıdaki basit örnek, Java'daki programlı mantıksal operatörleri gösterir. Aşağıdaki java kodunu kopyalayıp test.java dosyanıza yapıştırın, bu programı derleyin ve çalıştırın:

Genel sınıf Testi (genel static void main (String args) (int a = 10; int b = 20; int c = 0; c = a + b; System.out.println ("c = a + b =" + c) ); c + = a; System.out.println ("c + = a =" + c); c - = a; System.out.println ("c - = a =" + c); c * = a ; System.out.println ("c * = a =" + c); a = 10; c = 15; c / = a; System.out.println ("c / = a =" + c); a = 10; c = 15; c% = a; System.out.println ("c% = a =" + c); c> = 2; System.out.println ("c >> = 2 =" + c) ; c >> = 2; System.out.println ("c >> = a =" + c); c & = a; System.out.println ("c & = 2 =" + c); c ^ = a; System.out.println ("c ^ = a =" + c); c | = a; System.out.println ("c | = a =" + c);))

Aşağıdaki çıktıyı alacaksınız:

C = a + b = 30 c + = a = 40 c - = a = 30 c * = a = 300 c / = a = 1 c% = a = 5 c> = 2 = 5 c >> = 2 = 1 c & = a = 0 c ^ = a = 10 c | = a = 10

Diğer operatörler

Java dili tarafından desteklenen birkaç operatör daha vardır.

Üçlü operatör veya koşullu operatör (? :)

Üçlü operatör- üç işlenenden oluşan ve boolean türündeki ifadeleri değerlendirmek için kullanılan bir operatör. Java'daki üçlü operatör, koşullu operatör olarak da bilinir. Bu. Hedef üçlü operatör veya koşullu operatör değişkene hangi değerin atanacağına karar vermektir. Operatör şu şekilde yazılır:

Değişken x = (ifade)? doğruysa: yanlışsa

Örnek

Aşağıda bir örnek verilmiştir:

Genel sınıf Testi (genel static void main (String args) (int a, b; a = 10; b = (a == 1)? 20:30; System.out.println ("Değer b:" + b); b = (a == 10)? 20:30; System.out.println ("Değer b:" + b);))

Aşağıdaki çıktıyı alacaksınız:

B değeri: 30 b değeri: 20

Operatör örneği

Operatör örneği- nesnenin belirli bir türde (sınıf türü veya arabirim türü) olup olmadığını kontrol eder ve yalnızca başvurulan nesnenin değişkenleri için kullanılır. instanceof operatörü şu şekilde yazılır:

(Referans nesne değişkeni) instanceof (arayüz sınıfı / tipi)

Örnekleri

İfadenin sol tarafındaki başvurulan nesnenin değişkeni, sınıf/arayüz türü testini şu şekilde geçerse: Sağ Taraf, sonuç doğrudur. Aşağıda instanceof operatörünün bir örneği ve açıklaması verilmiştir:

Genel sınıf Testi (genel statik geçersiz ana (Dize bağımsız değişkenleri) (Dize adı = "Oleg"; // Tür String olduğundan aşağıdakiler true değerini döndürür boolean sonuç = String örneği adı; System.out.println (sonuç);))

Aşağıdaki çıktıyı alacaksınız:

Karşılaştırılan nesne, atama hakkı için tür uyumluysa, bu operatör yine de true değerini döndürür. Başka bir örnek aşağıdaki gibidir:

Sınıf Araç () public class Car, Aracı genişletir (public static void main (String args) (Vehicle a = new Car (); boolean sonucu = Car'ın bir örneği; System.out.println (sonuç);))

Aşağıdaki çıktıyı alacaksınız:

Java'da operatör önceliği

Operatör önceliği, bir ifadedeki terimlerin gruplandırılmasını belirler. Bu, ifadenin nasıl değerlendirildiğini etkiler. Bazı operatörler diğerlerinden daha yüksek önceliğe sahiptir; örneğin çarpma operatörü, toplama operatöründen daha yüksek önceliğe sahiptir:

Örneğin, x = 7 + 3 * 2. Burada x'e 20 değil 13 değeri atanır, çünkü "*" operatörü "+"dan daha yüksek önceliğe sahiptir, bu nedenle önce "3 * 2" çarpılır ve sonra "7" ile çarpılır. "eklenir".

Tabloda en yüksek önceliğe sahip operatörler en üste yerleştirilir ve öncelik seviyesi tablonun altına doğru indirilir. Bir ifadede, Java'daki operatörlerin yüksek önceliği soldan sağa doğru değerlendirilecektir.

Kategori Şebeke çağrışım
son ek (). (puan) Soldan sağa
tekli ++ - - ! ~ Sağdan sola doğru
Çarpımsal * / % Soldan sağa
Katkı + - Soldan sağa
Vardiya >> >>> Soldan sağa
ilişkisel > >= Soldan sağa
eşitlik == != Soldan sağa
Bit düzeyinde "VE" & Soldan sağa
Bit düzeyinde özel "VEYA" ("XOR") ^ Soldan sağa
Bit düzeyinde "VEYA" ("VEYA") | Soldan sağa
Mantıksal "VE" && Soldan sağa
Mantıksal "VEYA" ("VEYA") || Soldan sağa
koşullu ?: Sağdan sola doğru
Atama = += -= *= /= %= >>= Sağdan sola doğru
Virgül , Soldan sağa

Bir sonraki derste Java programlamada döngü kontrolü hakkında konuşacağız. Bu öğretici anlatacak Çeşitli tipler döngüler, yazılım geliştirmede döngülerin nasıl kullanılabileceği ve hangi amaçlarla kullanıldığı.