"Etkili kodlamadan daha iyi bir şey yoktur, Amigo! Eski bir robota güven."

"Casuslar tarafından kullanılan şifrelerden mi bahsediyorsun?"

"Tabii ki hayır. Bilgiyi sindirilebilir bir biçimde sunmaktan bahsediyorum. Sayı sistemlerinden. Biliyorsunuz ki günlük hayatta çoğu insan ondalık sistemi kullanır. Her sayıyı temsil etmek için 10 sembol kullanır: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 10 rakam olduğu için sisteme ondalık sistem denir."

"Bu, on parmağı olan insanlar için uygundu. Ancak programcılar büyük mucitler. Hemen farklı sayıda basamak kullanan kodlamalar buldular. Örneğin, 2, 8, 16 veya 64 basamak. Bunu, 'sinyal var / sinyal yok' ilkesine dayanan bilgisayarlar için uygun hale getirin."

"Ah, ortak noktalarını anlıyorum... Bütün bu sistemler ikinin kuvvetlerine dayanıyor.

sekizli kodlama

"İyi gözlem. 8 rakam içeren bir kodlamayla başlayalım. İnsanlar bunu en kolayı olarak bulabilir: 8 ve 9 rakamlarını bırakın ve - bam - sekizli kodlamayı (sayısal sistem) elde edersiniz. Son zamanlarda size harf harflerinden söz edildi, değil mi ? ?"

"Evet bendim."

"Pekala, sürpriz! Sekizli sistem kullanılarak kodlanmış sayısal hazır değerler ayarlayabilirsiniz. Tabii gerçekten ihtiyacınız varsa. Göründüğünden daha kolay. Tüm sayının önüne 0 koymanız yeterli.

"Öyleyse sayısal bir hazır değer sıfırla başlıyorsa, bu onun sekizlik olduğu anlamına mı geliyor ?"

"Evet, Java bunu sekizli olarak ele alacaktır.

Örnekler:

kod notlar
int x = 015;
x 13'tür: 1*8+5
int x = 025;
x, 21'dir: 2*8+5
int x = 0123;
x, 83'tür: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
Bu derleme yapmaz: 8, sekizli kodlamada kullanılan sembollerden biri değildir.

"Kodunuza sekizli sayılar yazmanız pek olası değildir, ancak bunların ne olduğunu bilmelisiniz. " Sonuçta, başkaları tarafından yazılan kodları okumak zorunda kalacaksınız. Ve yukarıda bahsedildiği gibi, programcılar büyük mucitler.

Pekala, öylece gidip her sayının önüne 0 yazamayacağınızı unutmayın."

"Ama sekizli olmasını istersem, o zaman yapabilirim?"

"Evet.

ikili kodlama

"Henüz anlamasanız bile, ikili kodlama sizin ana dilinizdir. Size hatırlatayım. Sekizlik sadece 0-7 rakamlarından oluşuyorsa, ikili kodlamada sadece 0 ve 1 vardır."

"Bu kodlama neden gerekli?"

"Yukarıda da belirttiğim gibi bu tamamen bilgisayarın iç yapısıyla alakalı. Bir bilgisayardaki her şey elektrikle çalışır ve olduğu gibi, elektrik kullanarak bir şeyi depolamanın ve iletmenin en verimli yolu iki durumu kullanmaktır: ya telde elektrik yok (sıfır) ve elektrik var (bir)."

"İşte bu yüzden bu kadar popüler... Hmm, görünüşe göre bu dili gerçekten hatırlamaya başlıyorum!"

"Bütün robotlar bunu mükemmel bir şekilde anlıyor. Java'da çok sık kullanılmasa da Java, üzerinde çalıştığı donanımdan tamamen soyutlanmış, üst düzey bir dil olarak kabul ediliyor. Gerçekten de, verileri depolamak ve işlemek için hangi formatın kullanıldığını gerçekten umursuyor musunuz? bir bilgisayarın içinde mi?

"Fakat son on yılda, programcılar ikili kodlamayı (ve buna dayalı diğer kodlamaları) sevmeye başladılar. Sonuç olarak, Java'nın ikili sayıları girdi olarak alan operatörleri var. Kayan noktalı sayıların doğruluğu ikili kodlamalarına bağlıdır. temsil.

"Kısacası, bu kodlama hakkında bilgi sahibi olmanız, bilmemenizden daha iyidir."

"Doğru. Ve sekizli kodlamada olduğu gibi, Java'nın değişmez değerleri ikili sistem kullanarak kodlamanın bir yolu var."

"Yani sadece 0'lar ve 1'lerden mi oluşacaklar?"

"Kesinlikle. Java derleyicisinin, kodun yalnızca sıfırlar ve birlerden oluşan bir ondalık sayı yerine ikili olarak kodlanmış sayısal bir sabit değer içerdiğini anlaması için , tüm ikili sabit değerlerin 0b önekiyle başlaması adettendir ('b ' ' ikili kelimesinden gelir).

Örnekler:

kod notlar
int x = 0b100; 
х 4'tür: 1*4+0*2+0
int x = 0b1111;
х 15'tir: 1*8+1*4+1*2+1
int x = 0b1111000111; 
х 967'dir: 1*2 9 +1*2 8 +1*2 7 +1*2 6 +0*2 5 +0*2 4 +0 *2 3 +1*2 2 + 1*2+1;
int x = 0b12000;
Bu derleme yapmaz: 2, ikili kodlamada kullanılan sembollerden biri değildir.

Onaltılık kodlama

"İkinin dördüncü kuvveti kaçtır?"

"On altı. Bana kadar gelen bir robota sormak için doğru soruyu bulmuşsun!"

"Görünüşe göre çok yol kat etmişsin. Neyse, on altı. Sekizli ve ikili kodlamalara ek olarak, sabit değerler onaltılık olarak da yazılabilir. Bu çok popüler bir kodlamadır.

"Bunun nedeni, ikili notasyonun sayıların gerçekte nasıl depolandığına olabildiğince yakın olmasına rağmen, insanların bu tür sayılarla etkili bir şekilde çalışması çok zordur: ikili olarak, bir numara 7 değil, bir milyon 20 basamaklıdır.

"Bu yüzden programcılar onaltılık sistemi buldular. Sonuçta, doğru bir şekilde not ettiğiniz gibi, 16, 2'nin 4. kuvvetine yükseltilmiştir, yani tam olarak 4 bit, bir onaltılık basamağa karşılık gelir.

"Böylece her 4 bit artık tek bir onaltılık basamakta yazılabilir."

"Doğru. Onaltılık kodlamanın da kendine özgü bir ön eki var: 0x . Örnekler:

Ondalık sayı İkili gösterim Onaltılık gösterim
17 0b 0001 0001 0x1 1 _
4 1 0b 0010 1 00 1 0x2 9 _
85 0b 0101 0101 0x5 5 _
256 0b 1 0000 0000 0x 1 0 0

"Tamam, sekizli sistemi nasıl elde ettiğimiz yeterince açık: 8 ve 9 rakamlarını attık. Ama onaltılık sistem için eksik olan 6 basamağı nereden bulacağız? Onları görmek isterim!"

"Her şey çok basit. İngiliz alfabesinin ilk 6 harfi eksik olan 6 rakam olarak alındı: A (10), B (11), C (12), D (13), E (14), F (15) .

Örnekler:

Onaltılık gösterim İkili gösterim Ondalık sayı
0x1 _ 0b 0000 0001 1
0x9 _ 0b 0000 1001 9
0x Bir 0b 0000 1010 10
0xb _ 0b 0000 1011 11
0x C 0b 0000 1100 12
0x D 0b 0000 1101 13
0x E 0b 0000 1110 14
0x F 0b 0000 1111 15
0x 1 F 0b 0001 1111 31
0x AF _ 0b 1010 1111 175
0x F F 0b 1111 1111 255
0x F F F 0b 1111 1111 1111 4095

"Onaltılık bir sayıyı ondalık sayıya nasıl çevirirsiniz?"

"Çok basit. Diyelim ki 0 x A F C F sayınız var. Ondalık basamakta bu ne kadar? İlk olarak, bir konumsal sayı sistemimiz var, bu da her basamağın toplam sayıya katkısının bir kat arttığı anlamına geliyor. 16 sağdan sola doğru gidildikçe:

A * 16 3 + F * 16 2 + C * 16 1 + F

A sembolü 10 rakamına karşılık gelir, C harfi 12 rakamına sahip olduğumuzu söyler ve F harfi on beşi temsil eder. Biz:

10 * 16 3 + 15 * 16 2 + 12 * 16 1 + 15

Rakamlara karşılık gelen çeşitli güçlere 16'yı yükselterek şunu elde ederiz:

10 * 4096 + 15 * 256 + 12 * 16 + 15

Her şeyi özetliyoruz ve şunu elde ediyoruz:

45007

"Artık 45007'nin bellekte nasıl saklandığını biliyorsunuz."

"Evet, biliyorum. 0x A F C F "

"Şimdi onu ikiliye çevirelim. İkilide şöyle olurdu:

0b 1010 1111 1100 1111

"Dört bitlik her küme tam olarak bir onaltılık karaktere karşılık gelir. Bu çok uygun. Herhangi bir çarpma veya üs alma olmadan."