Onaltılı sistem nedir?


13

Onaltılı sistem nedir ve neden hesaplamada bu kadar çok kullanılır? Bilgisayarların veri depolamak için 0s ve 1s kullandığını biliyorum, bu yüzden nasıl onaltılık kullanıyoruz?


13
Konu dışı değilse, böyle bir temel soru Süper Kullanıcı'nın başlamasından 5 yıl sonra nasıl tekrarlanmaz?
Peter Mortensen

3
@PeterMortensen Hatta garip, henüz kardeş sitelerin hiçbirinde sorulmadı, en azından, bulabileceğim değil.
Nzall

9
Vikipedi'nin oldukça iyi bir cevabı olduğu için sorulması gerekmeyebilir: en.wikipedia.org/wiki/Hexadecimal
Piers Myers

4
Neden bu kadar çok oy veriyor?
Vi.

Yanıtlar:


31

Onaltılık hesaplamada çok yaygın olan bir sayı sistemidir. Daha önce sadece 1s ve 0s olan bir ikili duymuş olabilirsiniz .

İnsanlar çoğunlukla 10 rakamımız olan ondalık (temel 10) sistemi kullanırlar:

0, 1, 2, 3, 4, 5, 6, 7, 8 ve 9

Yine de bilgisayarlar ondalık sistem kullanarak çalışmaz. İkili bir duruma sahiptirler (bir şey doğru veya yanlıştır) ve bu nedenle taban 2'de çalışır (ikili sayılar genellikle 0b önekidir) ve yalnızca sayılar 0 ve 1'dir.

Daha önceki günlerde sekizli (veya baz 8) kullanıldı. Bu iyi bir şeydi, çünkü taban 8'deki "10" ikilikte "0b1000" idi (ondalıktaki 10 ikilikte 1010'dur). Sayı yazarken sekizli genellikle "0o" önekine sahiptir (ancak çoğu programlama dilinde yalnızca '0' ön ekine sahiptir). Buna taban 8 deniyor çünkü sekiz rakamımız var.

Octal bugün hala kullanılıyor, çoğunlukla Unix ve Linux'ta izinler ayarlanırken

Zaman geçtikçe, hesaplama gücü ve alan hızla arttığı için daha büyük sayıları temsil etmenin daha kolay bir yoluna ihtiyacımız vardı. Onaltılık veya taban 16'yı kullanmak için standart oldu , çünkü 16 gibi 8, 2 basamaklı bir güçtür, bu da basamaklar arası dönüşüm yapmayı kolaylaştırır ( bu yoruma bakın. 16 rakam olduğundan, harfler kullanıldı Ayrıca, hex genellikle 0x ile başlar.

Onaltılık sayılar 4 bit (1 sekizlik sayı 2'yi temsil edebilir) ve bu nedenle bir bayttaki iki sayı olduğu için onaltılık sayılar da yararlıdır. Çoğu onaltılık düzenleyicide , bir bayt bu şekilde temsil edilir.

sayma

Temel 10'da 10 rakamımız var. 9'dan sonra ne yapacağız? Rakamların dışındayız. Orijinal sayının solunda "onlarca" bir yer oluştururuz, bu sayı 1 olur ve en sağdaki 0 ​​olur. Aynı şey onaltılık olarak da gerçekleşir:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11 vb.

Biz 0x1F almak ve daha sonra süreç 0xFF kadar (ondalık 255) kadar tekrarlar ve sonra 0x100 olsun. Sayma hakkında daha fazla bilgiyi burada bulabilirsiniz .

İşte ondalık, onaltılı, sekizli ve ikili arasındaki dönüşümleri gösteren bir grafik: Onaltılık Dönüşüm Tablosu


21
En büyük yararı, 16'nın 2 gücü olduğu için, basamaklar arası dönüşümler yapabilmenizdir.
TRiG

2
Pek çok dilin Octal sayıları için 0değil önekini kullandığını unutmayın 0o.
ysap

2
16'nın 2'nin katı olduğu hakkındaki notunuz TRiG'nin yorumundan yanlış kopyalanmıştır. Çoğul olmak ilgili bir ilişki değildir.
Ryan Reich

2
@ justcool393, "temel 10" adını verdiğiniz adın aslında "ondalık" olduğunu belirtmekte fayda olabilir. Bu, baz 8 (sekizli), baz 10 (ondalık) ve baz 16 (onaltılık) arasındaki ilişkiyi netleştirmeye yardımcı olabilir.
HalosGhost


4

Onaltılı sistem nedir

Onaltılık sistem, 0123456789ABCDEF2 ( 01) kullanan ikiliden farklı olarak 16 basamak ( ) kullanan veya 10 (0-9) kullanan ondalık sayı olan temel 16 numaralandırma sistemidir . (Sistemimizde) yalnızca 10 rakam olduğundan, bunun yerine "rakam # 10", "rakam # 11" vb.

neden hesaplamada bu kadar çok kullanılıyor

16, 2'lik bir güçtür, bu da onaltılık sayıları ikili sayılara dönüştürmeyi kolaylaştırır ve belirttiğiniz gibi "bilgisayarlar veri depolamak için 0s ve 1s kullanır." Her basamak tam olarak 4 bit veri depoladığından, onaltılık basamak çok kolay bir şekilde 4 ikili basamağa (1 bit) dönüştürülebilir veya tersi de geçerlidir.

| hex bin  | hex bin  |
| 0   0000 | 8   1000 |
| 1   0001 | 9   1001 |
| 2   0010 | A   1010 |
| 3   0011 | B   1011 |
| 4   0100 | C   1100 |
| 5   0101 | D   1101 |
| 6   0110 | E   1110 |
| 7   0111 | F   1111 |

neden onaltılık kullanıyoruz

Büyük sayıları temsil etmeyi ikili dosyadan daha kolay hale getirir. Yalnızca iki onaltılık basamak, aşağıdaki gibi 256 farklı değeri temsil edebilir:

dec  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
hex 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 ...

Dört onaltılık basamak 65536 değeri temsil edebilir ve bu böyle devam eder. Hex, verileri hexdump adı verilen bir şeyle incelemeyi kolaylaştırır harfler, sayılar ve noktalama işaretleri her karakteri 0 ile 256 arasında bir sayıya ( ASCII olarak adlandırılır veya bazen başka kodlamalar kullanarak) eşleyen bir formatta saklandığından, olarak . Ayrıca, diğer birçok dosya formatı (PNG gibi), dosyanın oluşturduğu her bilgi parçasının 256 bit içereceği şekilde düzenlenmiştir.

Özetle, 16, 2 ve 256'nın gücü 16'dır. Bu, hem ikili sayıları hem de metin veya diğer verileri temsil etmenin güzel bir yoludur.


2

Onaltılı sistem nedir?

Abcd bir numaranız varsa, bu durumda ((a * + b) + c) + d' ye eşittir . Yani bu şöyle:

  • abcd (ikili) = ((a * 2 + b) * 2 + c) * 2 + d
  • abcd (sekizli) = ((a * 8 + b) * 8 + c) * 8 + d
  • abcd (ondalık) = ((a * 10 + b) * 10 + c) * 10 + d
  • abcd (onaltılık) = ((a * 16 + b) * 16 + c) * 16 + d

Onaltılık bir sistemde 16 rakama ihtiyacınız vardır, ancak sadece on rakama sahibiz (0..9). Bu nedenle, eksik 6 basamak için A. = F karakterleri A = 10, ..., F = 15 ile kullanılır.

Tabii ki, örneğin 5 veya 7 tabanı gibi diğer birçok sayı sistemini de düşünebilirsiniz.

Sayılarla hesaplama için hangi tabanı kullandığınız önemli değildir. İkili sistemde ekleme ve çarpma yapabilir, ondalık sistemde ve onaltılı sistemde yapabilirsiniz. Ondalık sistemde hesaplama yapmak için kullanılır, bilgisayarlar bunu ikili sistemde yapar.

Onaltılı sistem hesaplamada neden bu kadar çok kullanılıyor?

Yukarıda belirtildiği gibi, hangi sayı sisteminde bir sayı verdiğiniz önemli değildir. Temel alınan sayı aynıdır, yalnızca gösterim değişir. Bilgisayar dahili olarak her zaman sayıları ikili olarak saklar ve kullanır (örn. İle hesapla).

Peki neden programcılar (benim gibi) farklı sayı sistemleri kullanıyor? 2 gücüne dayalı bir sayı sistemi seçmenin iki nedeni vardır. Birincisi kısalık, ikincisi ise bitlerin ayarlandığı iyi bir görünümdür.

kısalık

Bir arabellek içeriğini konsola yazarken bir işlevim varsa, ondalık basamakta yazdırılan, 1 ila 3 basamaklı (ondalık: 0..255) kod yazabilirim. Sayıyı ikili biçimde yazıyorsam, 1 ila 8 basamaklı çıktıyla sonuçlanırdım (ikili: 0..11111111). Ayrıca sekizli sistemi kullanabilir ve 1 ila 3 basamaklı (sekizli: 0..377) veya 1 ila 2 basamaklı (onaltılık: 0..ff) onaltılık olabilir.

Bu sadece bir bayt içindi. Şimdi 32 bitlik bir sayı yazmak istediğinizi varsayalım:

  • ikili: 0..11111111111111111111111111111111
  • sekizli: 0..37777777777
  • ondalık: 4294967295
  • onaltılık: 0..ffffffff

Gördüğünüz gibi onaltılık çıktı en kısa olanıdır.

Bitleri görme

Paketlenmiş bilgileri saklamak için yaygın bir örüntü, her bitin bir baytta ayrı ayrı kullanılmasıdır. Örnek dosya özniteliklerini ele alalım (bkz. MDSN ). "Gizli", "arşiv", "salt okunur", "geçici" ve diğerleri özelliklerini istiyorsunuz. Her özniteliği bir baytta depolayabilir veya bilgileri her bir bitin tam olarak bir özniteliği temsil ettiği bir bayta (veya birden çok bayt) paketleyebilirsiniz. MSDN makalesindeki dwFlagsAndAttributes'a bakarsanız, Windows'un bu kalıbı kullandığını görebilirsiniz.

MSDN sayfasında kalmak, FILE_ATTRIBUTE_ENCRYPTEDörnek olarak bu bayrak ondalık 16384 ve onaltılık 0x4000. Baştaki "0x" sadece onaltılık sayıları işaretlemek için bir C programcısının konvansiyonudur, bu yüzden sadece 4000'e bakacağız. Hangi bitlerin ayarlandığını bilmek istediğinizde, önce 16384'ü ikiliye dönüştürmeniz gerekir. normalde zihinsel aritmetik ile yapın. Ama onaltılı 4000'i ele alalım. Bu oldukça kolay. 16, 2 * 4'tür, bu nedenle her onaltılı sayı tam olarak 4 bittir. Bu nedenle sadece 4'ü ikili 0100'e, sıfırları ikili 0000'a dönüştürüyoruz ve işimiz bitti.

Genellikle tek tek bitlerle ilgili değildir, ancak programcılar işleri 2'nin gücüne hizalama eğilimindedir. Programları rastgele bir adrese değil, en az 16 anlamlı bitin sıfıra ayarlandığı bir adrese yüklemeyi severiz. Bu şekilde bir adresiniz varsa 0x12345678, bu adresin 0x03810000'e yüklenen adrese değil, 0x1234'e yüklenen programa ait olduğunu kolayca görebilirsiniz.

İkili, sekizli veya onaltılı mı tercih edersiniz?

Bu bir lezzet meselesi. Doğrudan bitleri görmek istiyorsanız ikili iyi olabilir. Uzun sayılar için, bit 23 veya bit 24'ün ayarlanıp ayarlanmadığını görmek için basamakları saymanız gerekirse ikili ikili sinir bozucu olabilir. Bu, onaltılık ile daha kolaydır, çünkü her basamak 4 biti temsil eder, bu nedenle daha az saymaya sahipsiniz. Şahsen nadiren sekizli kullanıyorum. Çok nadirdir.

Peki ama neden 32 tabanını kullanmıyorsunuz?

Baz 32 2'nin gücüdür, bu harika. Ancak 0..9, A.V gibi 32 basamağa ihtiyacınız olacaktır. Bu hatırlanması gereken daha fazla rakamdır ('S' rakamının hangi cevaba cevap vereceğini kolayca tespit edebilir misiniz?). Başka bir uyarı, taban 32 ile iki onaltılık basamağın tam olarak bir bayt olduğu güzel özelliği kaybetmenizdir, bu da bellek içeriğine göz atarsanız gerçekten kullanışlı olur! Ayrıca taban 32 ile bir baytın sahip olabileceği değerleri temsil etmek için hala 2 basamağa ihtiyacınız vardır. 32 bitlik bir değer için 8 onaltılık basamak yerine sadece 7 basamağa ihtiyacınız vardır, ancak bu temel 32 sisteminin dezavantajlarıyla yaşamak için çok fazla değildir.


1

Günümüzde kullanılan farklı sayı gösterme sistemleri (= içerir):
ikili, sekizli, ondalık ve onaltılı.
Hangisini seçeceğiniz genellikle eldeki görev için kullanım kolaylığına bağlıdır.

İkili elektronik sistemlerde temsil edilmesi kolay olduğu için genel olarak bilgisayar sistemleri ve dijital teknolojide kullanılır; taban-2 sayıları için fonksiyonlar, açma / kapama, doğru / yanlış veya benzer herhangi bir tekrar eden iki durumlu bilginin temsili gibi kolayca inşa edilebilir.

sekizli , üç ikili basamaklı gruplar varsa güzeldir, örneğin Unix / Linux'ta izin ayarlarında olduğu gibi.

bir an için ondalık sayıyı atlarsak, onaltılık sekizlikle aynı şekilde güzeldir, ancak dört ikili basamak için ve 8 bitin, bir bayt, iki onaltılık basamağa güzel bir şekilde uyması. ( = cevap )
Bunun bir bilgisayardaki çift-8-bit gruplarının kolayca yazılması, temsil edilmesi ve anlaşılması - yani; yazılım yazarken, veri işlerken (örn. HTML / CSS'de rgb renk değerleri), veri yapıları ve benzeri herhangi bir şey yaparken günlük kullanımda çok uygundur.

ondalık . Ondalık sistemin on parmağımız ve ayak parmağımız olduğu gerçeğinden geliştiği tahmin edilebilir. Tek bir rakam, her bir parmak için en fazla on taneye kadar sayılan öğe sayısını temsil eder.

Bunlar
, 2, 8, 10 ve 16 temelli sayı sistemlerini temsil eder .

Genellikle taban, kaç tane tek basamaklı "öğe" sayabileceğinizi söyler, örneğin, ikili, iki ondalık, on vardır.
Onaltılık 16 tek haneli öğe olduğundan, sistem 16 "sayı" gerektirir, bu nedenle "a" 10 ve "f" ondalık sistemde 15'e eşit olan 0-9 ve af (ondalık sayıya göre 6 ekstra) kullanır.

Genel mod ile devam etmek için: güzel bir tek haneli temsiliniz olduğu sürece, herhangi bir baz 2 veya daha üstü çalışır.

Ondalık sayılar şunlardan oluşur:

... d * 10³ + c * 10² + b * 10¹ + a * 10⁰

ondalık sayı "dcba" için - d, c, b, a ile 0123456789 arasından seçilmiş

Şimdi bunu şu şekilde değiştirin:

... d * baz³ + c * baz² + b * baz¹ + a * baz⁰

ve herhangi bir temel 2 veya daha yüksek "çalıştığını" gösteren daha genel bir formunuz var;
örneğin beş basamaklı, taban 5, yukarıdaki diğerlerinden herhangi biri kadar uygun olabilir veya neden 12 haneli (bir düzine) bir zaman sistemi (12 saat = "10" taban 12, ilk "ondalık" Bir saatin 1 / 12'si [5 dakika])

Not: ⁰¹²³ - ekranınız başka bir şey gösteriyorsa üst simge 0123


Şu anda bu, gerçekte ne olabileceğinin 'saplaması' olabilir.
Hannu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.