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.
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).
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 VE
int x = 112; int y = 94; int z; z = x & y; // z = 80: 00000000 00000000 00000000 01010000Bit 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 01111110Bit 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İş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İşareti dikkate alarak sağa kaydırın
int x = - 17, z; z = x >> 2; // z = -5: 11111111 11111111 11111111 11111011İ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:- x + = b ifadesi, x = x + b anlamına gelir.
- x - = b ifadesi, x = x - b anlamına gelir.
- x * = b ifadesi, x = x * b anlamına gelir.
- x / = b ifadesi, x = x / b anlamına gelir.
- x% = b ifadesi, x = x% b anlamına gelir.
- x & = b ifadesi, x = x & b anlamına gelir.
- x | = b ifadesi, x = x | B.
- x ^ = b ifadesi, x = x ^ b anlamına gelir.
- x ifadesi<<= b означает x = x << b .
- x >> = b ifadesi, x = x >> b anlamına gelir.
- 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),
- " < " (меньше) " <= " (меньше или равно)
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.
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:
Şebeke | Açı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:
Şebeke | Açı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ığı.
Samsung Galaxy s4 - “Hayatın arkadaşı!
Fotoğraf kitabı oluşturmak için bir program seçme
Windows ve iPhone için ICloud Drive - ayrıntılı talimatlar
Kullanım talimatları iPad 3
Fotoğraflara, metinlere ve diğer kişisel dosyalara ne olacak?