1000100B - 1 gibi ikili sayılar için notasyon

"Merhaba, Amigo!"

"Merhaba, Bilaabo!"

"Size farklı numaralandırma sistemlerinden biraz bahsetmek istiyorum."

"İnsanların ondalık sistemi kullandığını zaten duymuşsunuzdur. İşte bu sistemin ana gerçekleri:

1)  Sayıları yazmak için 10 basamak kullanılır: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

2)  543 sayısı 5 yüz + 4 onlar + 3 bir demektir.

"Bu, 5*10 2 + 4*10 1 + 3*10 0 olarak yazılabilen 5*100 + 4*10 + 3* 1 yazmaya eşdeğerdir .

Binler, yüzler, onlar ve birlerin 10 sayısının kuvvetleri olduğunu unutmayın.

1) Bir, 10 üzeri sıfırdır.

2)  On, 10'un birinci kuvvetidir.

3) Yüz, 10'un ikinci kuvvetidir.

4)  Bin üçüncü kuvvette 10'dur, vb.

"Evet. Anladım."

"Fakat şimdi sadece 8 rakamımız olduğunu hayal edin. Sonra sekizli sisteme sahibiz. İşte ana gerçekler:"

1)  Sayıları yazmak için 8 basamak kullanılır: 0, 1, 2, 3, 4, 5, 6, 7.

2) 543 8  sayısı 5*8 2 +4*8 1 +3*8 0 anlamına gelir . Diğer bir deyişle 5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10

Sayıyı temsil etmek için kaç basamak kullanıldığını belirtmek için 8 ve 10'u alt simge olarak yazdım.

"Sanırım anladım. Sekizlik sistemdeki bir sayıyı ondalık sayıya çevirebileceğimi düşünüyorum. Ama muhtemelen diğer tarafa gidemezdim."

"O kadar zor değil. Bir kum yığınını taşımak için birkaç kamyon kullanmanız gerektiğini hayal edin. Damperli kamyonlarınız, sıradan kamyonlarınız ve çok küçük kamyonlarınız var. Ama kamyonlar dolu değilse gidemezler."

"Nasıl yapardın?"

"En büyükleri olduğu için önce damperli kamyonları doldururdum. Sonra kamyonu dolduracak kadar kum kalmadığını görünce daha küçük araçlara geçerdim. Sonra daha da küçük araçlara geçerdim."

"Aslında burası çok benzer. 355 10 sayısını tekrar sekizliye çevirmeye çalışalım ."

"Önce 64'e (8 2 ) bölüp 5 kalanını 35 buluyoruz. Bu da sayımızın ilk basamağının 5 olduğu anlamına geliyor. Sonra kalanı 8'e (8 1 ) bölüp kalanla 4 elde ediyoruz. 3. Böylece 543 8 sayısını elde ederiz ."

"Bu arada diğer yöne de gidebilirsin. Sonuçta 543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3. Sekizlik "onlarımız" " ve "yüzler" 8'e bölünmelidir. Bu nedenle, 8'e bölmeden kalan sekizlik hanemiz olacaktır."

“Önce 355'i 8'e bölelim. 4)*8+3; İşte rakamlarımız: 5, 4, 3. Aradığımız sayı 543 8 ."

"Anladığımı sanıyorum ama her şeyi baştan sona anlamak için biraz çalışmam gerekecek."

"Programlama genellikle farklı tabanlara sahip sayıların kullanılmasını içerir (yani numaralandırma sisteminde kullanılan basamak sayısı). En popüler olanları 2, 8, 10, 16 ve 64'tür."

"Ama bu neden gerekli? Neden 2, 8, 16 veya 64 basamaklı sayılara ihtiyacımız var?"

"İşlemcinin dahili olarak nasıl çalıştığıyla ilgili. Çok basit bir şekilde, eğer akım bir telden geçiyorsa o zaman değerine 1, akım yoksa o zaman değeri 0'dır deriz. Tüm sayılar hafıza hücrelerinde saklanır. Bunlar hücrelerin çok basit bir tasarımı var ve sadece 0 veya 1'i depolayabilirler."

"Ancak bu tür bir basitleştirme (yalnızca 0 veya 1), işlemci ve bellek içindeki öğelerin çok küçük olmasını mümkün kıldı. Modern işlemciler ve bellek modülleri milyarlarca farklı öğe içerir. Ve bunların alanı genellikle bir santimetrekareden fazla değildir."

"Vay. Artık biliyorum."

"Şimdi ikili sayılara dönüyoruz. Burada sekizli ile aynı şeye sahibiz, sadece daha kolay."

1)  Sayıları yazmak için 2 basamak kullanılır: 0, 1.

2) 101 2  sayısı 1*2 2 + 0*2 1 + 1*2 0 anlamına gelir . Başka bir deyişle, 1*4+0*2+1*1 =4+1=51 10

"Evet. Hatırlıyorum. 0 veya 1 değeri alabilen bir hücreye bit denir. Ancak çok fazla bilgi depolayamaz, bu yüzden 8'li gruplar halinde birleştirilirler. Bu gruplara bayt denir. "

"Kesinlikle. Bir bayt sekiz bitlik bir gruptur. Şu değerleri saklayabilir: 00000000, 00000001, ... 11111111. Bu değerler 0,1, ... 255 ondalık sayılarına karşılık gelir. Bu da bize toplam 256 değer."

Java'daki en büyük tamsayı nedir? Daha doğrusu türü nedir?

"A long. A long 8 byte'tan yani 64 bitten oluşur. -2 63'ten 2 63 -1'e kadar olan değerleri saklayabilir .

"Evet. Sayıların ondalıktan ikiliye nasıl dönüştürüleceği veya tersinin nasıl yapılacağına değinmeyeceğim. Aksi takdirde ders çok uzun olur."

"Bunun yerine, onaltılık sistem hakkında biraz daha konuşalım."

"Evet, çok ilginç. İkili ve sekizli sistemler için, sırasıyla iki ve sekizden başlayarak rakamlardan kurtulduk. Ama burada ne yapacağız? Yeni rakamlar ekleyeceğiz?"

"Aynen! Şuna bak:"

1) Sayıları yazmak için 16 hane kullanılır: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

2) 543 16 sayısı 5*16 2 + 4*16 1 + 3*16 0 anlamına gelir . Başka bir deyişle, 5*256+4*16+3*1 = 1280+64+3 = 1347 10

"Yani, harfleri rakam olarak mı ekledik? O_o"

"Evet. Peki önemli olan ne? Harfler mükemmel bir şekilde çalışıyorken neden yeni sayılar icat ediyorsunuz? Şuna bir bakın:"

onaltılık basamak ondalık değer
0 0
1 1
8 8
9 9
A 10
B 11
C 12
D 13
E 14
F 15

"Ondalıktan onaltılığa dönüştürmekten de bahsetmeyeceğim. Ama işte ilginç bir gerçek. Onaltılık bir basamak, 0'dan 15'e kadar değerlerle tam olarak 4 bit ile temsil edilir. Yani, bir bayt sekiz ikili basamakla yazılabilir. (0 veya 1) veya iki onaltılık basamak."

"İşte bir örnek:"

Ondalık sayı İkili numara onaltılık sayı
0 0000 0000 00
1 0000 0001 01
15 0000 1111 0f
16 0001 0000 10
31 0001 1111 1f
32 0010 0000 20
128 1000 0000 80
129 1000 0001 81
255 1111 1111 ff

"Onaltılık gösterim kolayca ikiliye dönüştürülür (ve tersi). Bu nedenle, bir sayının dahili bayt gösterimi programlamada nadiren ikili olarak verilir (0'lar ve 1'ler kullanılarak). Bu çok uzun ve anlaşılması zor olur. Onaltılı gösterim çok daha okunaklı ve derli toplu."

"Katılıyorum. Ben bile beğendim."

"Bu arada Java, çeşitli numaralandırma sistemlerindeki sayıları doğrudan koda yazmanıza izin veriyor:"

Temel Ayırt edici özellik örnekler geçersiz numaralar
2 0b  numaranın başında 0b 00001111 0b 11111 2 1
8  sayının başında 0 0 1234343 0 12 8
10 Hiçbiri 95459 909 bir
16 0x  sayının başında 0x 10ff 0x 1c gh

"Mükemmel ders. Teşekkürler, Bilaabo."