Neden onaltılık öğrenelim? [kapalı]


28

Günümde epey bir intro programlama dersi aldım, çoğunlukla sadece bulduğum her türlü programlamada ayaklarımı ıslatmak için. Beklendiği gibi, hemen hemen her sınıf aynı formatta çalışır: donanıma giriş, yazılıma girme ve sonra gerçek programlamaya başlarsınız. Donanım ve yazılımın nasıl çalıştığını anlamak çok önemli olsa da, her zaman her derste olan bir konuyla karıştırıldım.

Bulduğum yazılım bölümüne giriş, başarısız olmadan, ikili, onaltılık ve hatta bazen sekizli sayı sistemlerinde okuryazar olmaya her zaman büyük önem veriyorlardı. Bunların ne olduğunu ve bir bilgisayarın onları nasıl yorumlayacağını anlamanın iyi olduğunu anladım, ancak kendimi asla bu sayı sistemlerinin nasıl okunacağını ve yazacağını bilmeye ihtiyaç duymadım. Gerçekten, 10 tabanından başka bir şey gördüğüm tek zaman, CSS'deki renkler için, yani www.colorpicker.com gibi bir şey kullanırsanız daha kolay

Program dünyasındaki bu 10 tabanlı olmayan sayıların harika kullanımlarından habersiz miydim, yoksa bu bölümleri tüm programlama ders kitaplarına dahil etmek için eski bir gelenek mi? Ortalama bir programcının gerçekte hangi sekizli bir sayı kullanacağına dair iyi bir örneği var mı?


1
Ortalama bir programcının gerçekte hangi sekizli bir sayı kullanacağına dair iyi bir örneği var mı? Evet, Havacılık endüstrisi ile ilgili bir yazılım bulursanız, o zaman 4 basamaklı sekizlik bir sayı olan Transponder kodlarıyla karşılaşırsınız. en.wikipedia.org/wiki/Transponder_%28aviation%29
Ben Cottrell

Yanıtlar:


14

Tüm cevaplar iyi ama en değerli kısım olduğunu düşündüğüm şeyi ele almıyorlar. Farklı temellerde "düşünmeyi" öğrenmek, bilgisayarların sayıları yönetme biçimini daha akıcı hale getirir.

Oldukça iyi paketlenmiş bir dizi küçük harf saklamak istiyorsanız, bunu nasıl yapardınız?

Eh, kolayca kolayca 5 ile 5 bitlik bir sayı olan 0-31 aralığında çeviren 26 küçük harf vardır, 6 5 bitlik sayıları 32 bitlik alana (int?) Paketleyebilir ve hatta yeterince geride bırakabilirsiniz birkaç noktalama işareti için.

Hex'in böyle şeylere yardım ettiğini söylemiyorum, ama sayıların nasıl dönüştüğünü anlamak.

Başka bir durum, sık sık her zaman, ascii'de biraz uzun sayılar iletmek için base-64'ü kullanırsınız. Bunun nasıl uygulanacağını biliyor musunuz? Neden bu şekilde uygulamak? Bir oyunun kayıt kutusuna "CD KEY" yazdığın zaman yazdığın şeyin farkında mısın?

Ayrıca, eğlence için, bir süre için baz 12 ile oynayın. Matematik, 12. basamakta gerçekten ilginç görünüyor (10 karşılaştırmasıyla kıyaslandığında aptalca, keşke 6 parmakla geliştiysek - on yıllarca matematiği kavrayabilirdik). Bazı çok akıllı erken insanlar, saati geliştirmek için 12 tabanını kullandı.

10 tabanında, 8, 6 ve 4 ile 2, 5 ve 9 gibi kolay desenler yaratan 3, "Serin" sayıya sahibiz. Temel 12'de, "Küçük" olarak 8,9 ve 10'lu "Soğuk" sayıları olan 2,3,4,6,11 değerine sahip olursunuz; bu, eğer taban 12'yi kullanırsak, sayıdaki örüntüleri tanımakta çok daha iyi olacağız. çünkü onları sürekli görüyoruz.

Ayrıca, ikili. Bir yandan, 32'ye kadar güvenebilirsiniz - Bunu biraz yapıyorum, bazen 5'e kadar saymak işe yaramaz geliyor :)

İkili çok eğlenceli, ama sadece iyi çevirmiyor. Onaltılı ile iyi olduğunuzda, "A" yı 1010 ve "5" i 0101 olarak görmeye başlarsınız ve bunlar gerçekten önemli olmaya başlar. 6. bit'i çıkarmak istediğiniz bir bit alanınız varsa: 00100000, neyi "ve" ile? Sadece 0x20 olduğunu bilmelisin.

0x0600 ile bir şey kodunu görürseniz, hangi bitler çıkartılıyor? Bunu düşünmeden bile bilmelisiniz - aslında 0000011000000000 yazmış gibi okumalısınız (ama okunması kolay çünkü sıfır saymanız gerekmez).

Neden beyninizi ve veri işleme yeteneğini sınırlamak istiyorsunuz?


Aslında, saatler bazda geliştirildi60 .
Denis de Bernardy

@Disis, şu anki teorinin, parmaklarını geçtiğini düşünemeyen salak insanlara kaybederek on ikide sayılan bir kişi tarafından geliştirildikleri izlenimi altındaydım. 60 sadece 12 bölüm daha 5 kişilik gruplara ayrılmıştır ve 10 grunts üssünde bir saldırı sonrası gibi görünüyor :)
Bill K

Olabilir. Dürüst olmak gerekirse, hiçbir şekilde uzman değilim. Yorumunuz yalnızca uzun süredir unutulmuş bir hatırayı geri getirdi. Ayrıca 360 derece ölçülen açıların üs-60'tan (ve aynı babylonian mucitlerce) geldiğini hatırlıyorum, ancak sizin de belirttiğiniz gibi, üs-10 homurdanışlarının sadece aslen 12-temelli matematikçilerden fazlasıyla boğulmuş olduğunu söyleyebiliriz. :-) Şimdi, bazı Amerikan yerlilerinin yaptığı gibi, üs 20'de sayıldığımızı düşünün. :-D
Denis de Bernardy

44

Öğrenmek için ne Yetkili bir programcı olmak için farklı sayı tabanlarını anlamanız gerekir , ancak altıgen konusunda, ABCDEF'in 9'dan sonra gelmesi dışında öğrenilecek çok az şey vardır.


8
OP, zihinsel olarak 10 tabanına diğer tabanlardan aktarılabiliyor olabilir. Bu, bir noktada faydalı bir beceri olabilir ve hala bazı düşük seviye programcı kategorileri için olabilir, ancak bugün büyük ölçüde alakasızdır. Örneğin, vim'deki dönüşümü önemsiz bir şekilde yapabilirsiniz.
Rein Henrichs,

Bu doğru. Daha net olmalıydım.
jwegner

2
@Rein Bunu yaparken çok iyi olmamıştım (matematiği kafamda yapmak zorundayım), bu yüzden söyleyemem. Bununla birlikte, zihinsel olarak onaltından Z80 derleme diline geçebiliyordum, ki bu o zamanlar yapılabilecek bir şeydi. Onaltılıktan 80x86 assembler'a (ya da her neyse) geçme yeteneğinin bugün çalışan programcılar için hala faydalı olduğundan şüpheleniyorum.
Neil Butterworth,

1
@Neil Butterworth: 8080 opcod, hafızanın hizmet etmesi durumunda, aslında, sekizlikten bakıldığında daha mantıklı geliyor. Hafızam, bunun Z80 uzantılarına nasıl uygulandığına dair gerçek bir puslu
David Thornley

1
@Neil: Bence önemli kısım, xxx'in hedef ve yyy kaynağı olduğu bit biçiminde 01xxxyyy gibi görünen kayıt defteri-kayıt işlemine geçme talimatlarıydı. Başka bir sekizli önem olup olmadığını bilmiyorum.
David Thornley

18

Ortalama bir programcının gerçekte hangi sekizli bir sayı kullanacağına dair iyi bir örneği var mı?

Sekizli? Genelde değil, hayır, * nix izinleri hariç.

Onaltılık? Emin ol. Gömülü sistemler etrafındaki parçaları değiştiren, protokoller veya dosya formatlarına biraz seviyeden bakarak çok fazla sayıda bizi görmezden geliyorsunuz. Ancak, uygulama veya web işi yapan metalden uzaktaysanız, onunla daha da kolaylaşabilirsiniz.

Örnek: Konfigürasyon, mikrodenetleyiciler ve benzerlerine kaydedilir.

Anahtarları rasgele delmek suretiyle alınan 54312 numarasını alın. Hangi bitlerin ayarlandığını söyleyebilir misiniz? En azından başımın üstünden çıkamam. Onaltılık eşdeğer sonra, bu 0xd428. oÖte yandan, bana şu anda baktığım uç kalıbın 1101 0100 0010 1000 olduğunu söylüyor. Bu tür şeyler için daha mantıklı bir şekilde yapılandırılmış ve kendinize yakın olduğunuzda her zaman buna ihtiyaç duyduğunuzu görüyorsunuz. metal. Diyelim ki yukarıdaki sayı mcu'dan sıfırlanmaya başladığımı ve nedense 7 ve 9 bitlerine ihtiyacım olduğunu söyleyelim. Onaltılı, kolayca elde edilen sayının 0xd6a8, ancak ondalık olması gerektiğini kolayca görebilirim? Bu 54952, bana sorarsan sezgisel bir yere yakın değil. Tabii ki, bu değere 640 eklenmesi ile ilgili bir sorun, ancak çözülmesi daha fazla acı verici. Tabii ki, pratikte kişi bitlerde doğru konuma ve VEYA orijinal değere kaymış olabilir, ama yine de nihai gösterimin ne olduğunu bilmek isteyebilirsiniz.


1
Hangi tür istemler "neden hangi bitlerin ayarlandığını umursamalıyım?" Sorusunu sorar. Bazı (en çok? En?) Uygulamalar için bu konu ile ilgili değildir.
Neil Butterworth

10
Anlaştık - üst düzey gelişimden bahsettiğimizi varsayalım. Düşük seviyeli, belli bit ayarlamak veya sadece belki temizlenmiş, ama olup olmadığını olacak bazen tespit edersek hiç kanlı mikro botlar, ya da y yerine x saat hızında ihtiyacınız belli çevresel güç alırsa, ya da çalışıyorsa . Bu sadece başlangıç, ve eğer bu tür bir gelişmeyle ilgilenirseniz, temel olarak, tek bitlerin önemi var. Bazen çok fazla. Ama yine de, etki alanınıza bağlı, sadece diyorum ki; Gömülü dünyayı unutma. =)
n42

1
+1 - makineye ne kadar yakınsanız o kadar çok farklı taban kullanmanız gerekir. Sadece gömülü değil; Çoğu dilde bit bayrakları bulunur ve bunlar genellikle açık nedenlerden dolayı onaltılı olarak yazılmıştır. Tersine, bir ilk programlama kursunda öğretmek oldukça anlamsızdır, ancak daha sonra ilk programlama kurslarının çoğu anlamsızdır. Neredeyse tüm programcılar kendilerini doğru öğretiyor mu?

1
@Davor: Çünkü hex'in okunması daha kolay. 8 basamaklı onaltılık değeri 32 basamaklı ikili değerden çok daha hızlı anlayabilirim.
Steve S,

2
@ Steve S: Dürüst olmak gerekirse, tembel bir grup olduğumuzdan şüpheleniyorum. 0x80 0b10000000'den daha kısa yazıyor. Ama aynı fikirdeyim. Ayrıca, bir ilk programlama kursunda büyük ölçüde anlamsız olduğuna katılıyorum, ancak bunu ayrı matematiklere, gerçek zamanlı programlamaya, bilgisayar organizasyonuna ve benzerlerine sürükleyebilirsiniz.
n42

12

Ortalama bir programcının gerçekte hangi sekizli bir sayı kullanacağına dair iyi bir örneği var mı?

Unix'teki (veya Linux) bir dosyadaki izinleri ayarlıyorsanız, 3 basamaklı bir sekizli sayı kullanırsınız. İlk hane kullanıcının izinleri, ikincisi grubun izinleri ve son hane herkesin aldığı izinlerdir.

Bu gerçeği, geçen hafta yazdığım kodla anlamam gerekiyordu.

MD5 gibi standart karma algoritmaların çıktısına bakarsanız, bunları genellikle hex ile yazılmış bulursunuz. Bunun olağandışı temellerde aritmetik olarak ortaya çıktığı birkaç vaka gördüm.

Kayan noktanın dahili olarak nasıl temsil edildiğini ve bu nedenle neden 1/10'un kesin olarak temsil edilmediğini anlamak istiyorsanız, farklı temellerde nasıl aritmetik yapılacağını kesinlikle anlamanız gerekir. Bu, sizi arkada ısırdığı güne kadar ezoterik bir bilgidir ve aniden aceleyle anlamanız gerekir.

Ve bir var tonluk yukarı kırpma bilgisayarların veri iç temel ikili doğasını bulacaksınız diğer vakaların. Tabii ki sadece bir CRUD web sitesi yazıyorsanız, muhtemelen başkasıyla uğraştığı seviyelerde gerçekleştiği için hiçbiriyle asla karşılaşmazsınız.


4
* nix izinleri gerçek sekizlik değil. Bu temsillerle matematiksel hesaplamalar yapmazsınız. En iyi durumda, ikili maskenin sekizli gösterimleridir.
Joel Etherton

@Joel Etherton: Bir dosya statünden izinler aldığınızda, varsayılan olarak 10 tabanda gösterilecek olan sayılar olarak gelirler. Sekizlikten / sekizlikten dönüştürmeyi anlamıyorsanız, bu sayıları anlamak zordur. Bu gerçeği açıklamak için gereken belgeleri yazıyordum. Çok fazla matematiksel hesap vardı.
btilly

@btilly: Ne dediğimi yanlış anladın. Bir dosyadaki izinleri 755 olarak ayarlarsanız, bunu hiçbir şeye eklemeniz gerekmez. Bu sadece izin kombinasyonlarını tanımlayan bir maske. Bunun (4 + 2 + 1) (4 + 0 + 1) (4 + 0 + 1) (4 + 0 + 1) anlamına geldiğini bilmek zorundasınız ancak bunlar hala ikili maskenin temsilidir. "Dosya statüsü" derken neyi kastediyorsunuz? Asla 10'da verilen izinler için bir dosya statüsü görmedim (bu örneğe kesinlikle bağlı kaldım).
Joel Etherton

1
@Joel Etherton: perl -le '@stat = stat(shift); print $stat[2]' some_file10 üssünde bir sayı olarak stat elde etmeye çalışın ve chmodaynı şekilde Perl'lere de geçirmeniz gerekir . Bu nedenle, sayının bu şekilde bir veri tabanında depolanması mantıklıdır, bu noktada bu sayıları daha bilinen Unix izinleriyle ne yapmak zorunda olduğunu belgelemem gerekir. Dediğim gibi, bu varsayımsal bir örnek değildi.
btilly

@Joel Etherton: izinleri 419 (ondalık) olan bir dosyanız olduğunu, dosyayı kullanıcı tarafından çalıştırılabilir hale getirmek istediğinizi ancak dünyaca okunamayacağınızı söyleyin. Numarayı nasıl değiştirmelisiniz? C stat () çağrısında döndürülen değer bir intdir, nasıl yazdırmayı seçtiğiniz, başka bir konudur.
Vatine

9

Umarım, gerçek dünyada, Hex'i ikilik ondalık sayıya dönüştürmekte zorlanamazsınız. İstediğiniz şekilde dönüştürmek için emrinizde araçlar olacaktır.

Neler olup bittiğini anlayabilmeniz gerektiğine katılıyorum, ama bakarken neden ezberleyesiniz?

Ancak, anahtar numaraları hatırlamayı yararlı buldum (benim için 0x64 = 100, 0xFF = 255, 0xFFFF = 65535, vb.), Çok fazla geldiler.

8675309'un ikili, onaltılı ve sekizli halindeyken çıngırak alabilir miyim? Hayır, ama ihtiyacım olduğunda yapabileceğim bir araç açabilirim.


3
Genel olarak const olarak kullanılan 57005'i unuttunelvis = 57005;
Bevan

5

Octal'ı şimdiye kadar kullandığım tek şey, unix sistemlerinde dosya izinleri.

Kablo protokollerine yakın veya metal veri aktarımına yakın herhangi bir çalışma yaparsanız hex ve binary çok faydalıdır. Temel olarak veri, bir anda önemsiz olarak altıgen olarak temsil edilen ikili olarak akar.

Ayrıca, veri sayfalarının genellikle onaltılık değerlerden alıntı yaptığını göreceksiniz, bu nedenle kodun değerini veri sayfasında göründüğü gibi göstermek daha iyidir.

Bunlardan herhangi birini çok kullanırsanız, en azından ortak değerler için, kafanızdaki ondalık sayıya dönüştürme ve yazma konusunda oldukça yeterli olursunuz.

Bütün bunlar dedi; Ağır vurgunun çoğunlukla tarihi olduğunu düşünüyorum. Söylediğiniz gibi, ondalık basamağı dışında bir şeye ihtiyacı olmayan çok sayıda programcı var.


5

Aslında neden 2 sayı temsilinin gücünü öğrendiğini soruyorsun ?

Bilgisayarlar devrelerden oluşur , elektrik akımı iki farklı seviyedeki devrelerden akar, iki akım seviyesini temsil etmek için yüksek ve alçak, iki rakamı kullanırız, çünkü iki durumu tutabilirler, bir (yüksek) veya sıfır (düşük).

İkili basamak form kalıpları . 1000001. Ben beri: Örneğin, sen ve ben konuşabiliriz tek yolu ise, bir devre üzerinden geçer, biz bana harfini göndermek istiyorsanız, bana ikili desen göndereceği kurabilir tembel , 7 hane rakamını ezberlemek istemiyorum. Aksine, büyük ikili rakamları daha küçük bir sayıya göstermek için 2 numaralandırma sisteminin gücünü kullanacağım. 8 (2 ^ 3) veya 16 (2 ^ 4) kullanabilirim.

Gördüğünüz gibi çoğu bilgisayar donanımı ve yazılımı ikili gösterimi kullanır ve biz ikili gösterimi daha verimli ve acısız bir şekilde okumak için insanlar sekizlik ve sekizlik gibi 2 gösterimin gücünü kullanırız.

Şimdi 2 gösterimin gücünü anlaması gereken ortalama programcı örneği :

  1. ASCII
  2. Unicode
  3. Bellek yönetimi programlamasını anlama (yığın, yığın, bellek adresleri, çekirdek dökümleri)
  4. Hata ayıklama
  5. İkili verilerin okunması çoğunlukla Hex editöründe yapılır.

Şimdi son iki sentim, 2 sunumun herhangi bir gücünü çok hızlı bir şekilde öğrenebileceğinizden çok eminim (zaten programlamaya giriş yaptığınızdan beri) .. Dönüştürmeyi unutabilirsiniz, ancak isterseniz yabancı bir kavram olmamalı bir olmak ortalama programcı.


3

Hiç sekizlik kullanmadım, ancak hata ayıklayıcıda hex'i görmek olağandışı değil ve zaman zaman kaynak kodunuzda hex'i kullanmak daha mantıklı geliyor (normalde, çünkü temel veriler bit bayraklarıdır).


3

Bu günlerde çok fazla ihtiyaç olup olmadığını bilmiyorum, ancak yıllar önce, bir Sistem Programcısı iken, onaltılık okuyup anlayabilmek çok önemliydi. Bir depolama dökümü ile sunulacak (hepsi hex cinsinden) ve hex gösterimini IBM Assembly diline geri çözeceğim. Bunu bir süre yaptıktan sonra doğrudan yapabiliyorsunuz - hex'i okuyunuz ve montaj eşdeğerini yazınız. Hata ayıklama için çok kullanışlı. Onaltılık değerlerin eklenmesi ve çıkarılması, taban kayıtlarındaki ofsetleri hesaplamak için kullanışlıdır.

Şimdi pratikte bunun için çok az ihtiyaç olduğundan şüpheleniyorum, ancak bunun bilgisi kötü bir şey olabilir.


Ben de onaltılık yeteneklerimi edindiğim yer burasıydı. Daha sonra, VAX / VMS'de sembolik bir hata ayıklayıcı olmadan kodu hata ayıklamak zorunda kaldığımda keskinleşti (kodu herhangi bir sembol bilgisi olmayan müşterilere gönderdik). Günümüzde, nadiren kullanıyorum, ancak bazı URL'lerde hex'deki bazı bilgileri kodladığımız halde ve arada sırada bunları anında çözebilmemize yardımcı oluyor.
TomG

3

Bu ikili / onaltılık okumada "akıcı" olmakla ilgili değil, ancak karşılaştığınız zaman hızlıca zihinsel bir dönüşüm gerçekleştirebileceğiniz kadar rahat. Basit aritmetik ile rahat olmadan programlama hayal edin ve iki ile çarpmak istediğinizde bir hesap makinesine gitmek zorunda kaldı.

Onaltılık / ikili önemlidir, çünkü bu, bilgisayarların konuştuğu dildir. Özellikle hata ayıklama alıştırmalarından geçerken ve verileriniz onaltılı olduğunda, her zaman her yerde karşılaşırsınız.

Ayrıca, üs-2'yi, farklı sayısal türlerin dahili olarak nasıl temsil edildiğini ve aritmetik işlemenin nasıl yapıldığını bağlamda anlamayı vurgularım. Bununla, kayan nokta yuvarlama sorunları ve tamsayı taşması ile ne zaman ve nasıl baş edeceğinizi daha iyi anlayacaksınız.

Bir başka örnek olarak, bitsel işlemler ve bit bayrakları programlamada hala yaygındır ve bu, üs-2 anlayışının önemli olduğu bir başka yerdir.


2

Gerçekten, 10 tabanından başka bir şey gördüğüm tek zaman CSS'deki renkler içindir.

Unicode kod çizelgelerinde hiç bir karakter aramak zorunda kalmadınız mı? %20İçinde hiç bir URL görmediniz mi? Hiç bir GUID kullanmadınız mı? IPv6 adresini hiç görmediniz mi? Bir yazdı asla BLOBSQL'deki değişmez? Bir dosyayı hex editöründe hiç izlemediniz mi? Bir var çok conventially hex notated oluyor bilgisayar ilgili şeyler.

Sekizlik gelince, bugünlerde nadir, ancak hala Unix dosya sistemi izinleri için kullanılır.

Ayrıca bakınız: bitsel işlemlerin pratik uygulamaları

Herhangi bir "kabloya yakın" programlama yapmaktan kaçınabilseniz bile, bilgisayarların ikili bir şekilde çalışmasının, basit bir nedenden ötürü farkında olmaları önemlidir: Soyutlamalar sızıntı .

intÇoğu dilde soyutlama onun sabit genişlikli doğası sızıntıları. Tamsayılar taşar ve bunu 2 31 gibi ikili sayılar "yuvarlak" da yaparlar . Yalnızca ondalık bir düşünür, 2038 Yılı hatalarını açıklayamazdı .

float/ doubleEğer yazarsanız soyutlama 2. onun tabanını sızdırıyor 0.1, gerçekten 0.1000000000000000055511151231257827021181583404541015625 olsun. Ve tam bir 0.1 beklediğiniz için hata alacaksınız.


2

Deseni diğer bazlarda basit olan belirli sayıları tanımak, böcekleri çözerken genellikle büyük bir ipucudur. Cevabınız 347 ile yanlış ise, bu belki bir şey ifade etmiyor, ancak 256 ya da 128 oranında kapalıysa, belki bu bir şey ifade ediyor. İmzasız bir 16 bit veri türüne -1 koyarsanız, 65535'ten 1 daha az olan 65535'i elde edersiniz. 2 ^ 16'yı biliyorsanız, sorununuzu hemen anlarsınız.

Sekizlik gelince, bu sorulara bir göz atın ve kazayla sorduğunuzda sekizli tanımanın bu insanlardan daha iyi programcılar yapabileceğini görün.


1

Bu sistemleri ve nasıl çalıştıklarını anladığınızda kullanabileceğiniz bazı oldukça verimli matematik ve veri sıkıştırma teknikleri var. Muhtemelen onları ilk birkaç işte kullanmayacaksınız. Ancak, kıdemli olduğunuzda ve cebinizde çalışan overworked dinozor sunucusunda çalışan çok çalışan eski sistemi yaptırmanız istendiğinde onları arka cebinizde bulundurmanız güzel.
Api olmayan kontrolörler ve elektroniklerle uğraşırken daha önemli hale gelir. Özellikle o API'yi yazıyorsanız.


1

Bilgisayar biliminde çalışmanın bir parçası olan programlama kurslarına girişte, bu materyali iyi tanımak çok mantıklıdır. Assembly dilinde programlama yaparken, donanım tasarlarken, resmi dillerle ilgili bir kurs alırken vb. Konuya tekrar baktınız. Üniversitemdeki tüm elektrik mühendisleri programlama için bir ders gerektiriyor ve muhtemelen bu bilgileri kullanmaya devam edecekler. Bunun dışında, çok önemli değil.


1

Sekizlik sayılar, bazen karakter kümeleriyle çalışırken yararlı olur. İkincisi bayt tabanlıdır ve bir sekizlik = 8 bit = bir bayt. UTF-8'de, örneğin, ASCII olmayan karakterler iki veya daha fazla bayta sahip olabilir; sekizli sayılar, onları göstermek için onaltılık sayılardan daha uygundur.

Bitler kullanışlıdır çünkü ... hey! Bilgisayarınızın sürekli olarak 0s ve 1s ile çalıştığını biliyorsunuz, değil mi? Ciddiyim demek isterim ki ... Sadece şaka yapabilmekle ilgili değil, bilgisayar uzmanlarının 1 + 1 = 10 olduğunu bilen tek kişi olduklarını şaka yapmak değil. İkincisi bir dizi bayrakla uğraşırken veri tabanlarındaki depolama gereksinimlerinin azaltılmasını sağlar.

Onaltılık gelince, RPG karakterinin istatistiklerini ve ekipmanını arttırmak için asla bir hex editörü açmadın. Bir karakter editörü indirmek yerine böyle bir şey yapsaydınız, onaltılık sayıları anlamamanın neden uygun olduğunu çok iyi bilirsiniz. ;-)


Bence "sekizli" değil, "sekizli" demek istiyorsun. Bir sekizli hane üç bittir. ASCII olmayan karakterler için sekizli sabitlerin kullanımı, belgelerin çoğunda sekizli gösterimi kullanan bir PDP-11 üzerinde geliştirilen C'nin ilk günlerinden kalmadır (bu PDP-11 referans kartına bakınız ).
TMN

Olabilirim. İngilizce anadilim değil. :-)
Denis de Bernardy

1

3 yıl önce üniversiteden mezun oluyorum ve onaltılık sayıları okuyup yazabilmenin çok önemli olduğunu düşünüyorum. İş için çok sayıda büyük XML dosyasıyla uğraşıyorum (büyük, 100 MB +). Bazen geçersiz XML karakterinden şikayet eden ve herhangi bir metin düzenleyicide görüntülenemeyen bir XML dosyası alırsınız, bu yüzden Hex editörünü kullanmak ve geçersiz karakterleri belirlemek için kod yazmak zorunda kaldım. Bu görev hex numarasını bilmeden çok zor olurdu.


1

Yıllar önce 8 bit sistemlerde çalışırken hex'in değerini öğrendim.

Bir şeyin B000 veya E7FF'de bulunduğunu anlamanın netliği şaşırtıcıydı.

Dün, bir satırın sonunda hangi karakterlerin bulunduğunu tam olarak bilmem gerekiyordu. 0x0A ve 0x0A 0x0D arasındaki farkı bilmek gerçekten önemli olabilir.


1

Ortalama bir programcının gerçekte hangi sekizli bir sayı kullanacağına dair iyi bir örneği var mı?

Bugünlerde Octal oldukça nadir görülür, ancak hex'i çok sık kullanırım ve ikili sistemdeki sorunları düşünürüm.

Öncelikle C ve C ++ 'da, bazı Objective C ile programlarım ve Linux ve Mac OS X'te raster ve vektör grafikleriyle çok çalışıyorum. Bu arenalarda verimli çalışan ve depolamayı iyi kullanan kodlar yazmak çok önemli. Makinelerin dahili olarak neyle çalıştığınızı temsil ettiğini de anlamanız gerekir. Buna bakmak için en uygun yol hex. Örneğin, standart bir 24 bit renk pikseli üç baytta gösterilir ve bir bakışta 0x000000'ün siyah, 0x00FF00'ün kırmızı olduğunu ve 0x008000'in pembe olduğunu bilmek gerçekten çok faydalıdır!

Ayrıca dosya formatları için uluslararası standartlarda çok çalışıyorum. Son zamanlarda üzerinde çalıştığım bir tanesi, video yayınlamak, DVD'ler vb. İçin depolamak için kullanılan MXF. İkili bir format ve yine altıgen veya bazen ikili kullanarak en kolay şekilde kullanılabiliyor. Neden bazı MXF tabanlı videoların sisteminizde oynatılmadığını hata ayıklarken, 32 bitlik bir alana göz atmak ve ekranın boş bırakılma biti olduğunu fark etmek gerçekten de kullanışlıdır - ve yapabilirsiniz Bu onaltılık, ama 10 üssünde oldukça imkansız.

Kariyerinizi metin dizelerine masaj yapmak için Perl yazmakla geçirecekseniz, o zaman hayır, muhtemelen hex, octal veya binary ile aşina olmanız gerekmez. Ama yaptığım şeylerle uğraşmaya başladığınız an, en azından altıgen ve ikili esastır.


0

Bir programcı olmak istiyorsanız onaltılık bilmelisiniz. Anlayamadığınız için bilmeniz gereken ender gün işyerinde kabul etmek zorunda kalmak çok garip olurdu.

Bu, kafanıza onaltılık sayılar ekleyebileceğiniz anlamına gelmez. Yine de yaparsanız, düzenli ekleme kuralları sizi karıştırmaya başlar. :)


0

İkili, altıgen ve sekizli ortak olan, onların temel olmadıkları değil, 10'un ikisinin de gücü olduğudur. Bilgisayarlar doğası gereği ikili olduğundan, bu, her birine, verileri görüntülemek ve bunlarla başa çıkmak için en uygun veya verimli yol olan bazı uygulamalar sunar.

Tüm programlama düşük seviyedeyken, bu çok önemliydi. Günümüzün yüksek seviyeli programlamada, 2 numaralı gücünün sayısı sistemleri çok daha az önemlidir. Her programlama kursunda onlara kapsamlı bir giriş yapılması eski günlerin kalıntısı olabilir.

Fakat bu sayı sistemleri, yüksek seviyeli dillerde çalışırken bile, kullanımlarını sürdürüyor. Örneğin, renk hala 24 bit, birincil renk başına 8 bit olarak saklanır. Ve onaltılık bir baytı insan tarafından okunabilir bir şekilde temsil etmenin en iyi yolu olduğundan, programlamaya hiç giriş yapmamış kişilerin kullanabileceği varsayılan CSS'nin bile bir parçasıdır.

İkili anlamadan bilgisayarları anlayamazsınız. İkiliye giriş, programlamaya girişin her bölümünün gerekli bir parçasıdır. Gündelik işlerde sayı sistemleri arasında çok fazla dönüşüm yapmanız gerekmeyebilir, ancak bu tür egzersizleri yapmak, bu sayı sistemlerine gerçekten aşina olmanın tek yoludur *. Birden fazla 10 numaralı sistem içermeyen sistemi bilmek, doğru şekilde anlamanın tek yoludur, verilerin hepsi geçerli olabilir, birçok şekilde gösterilebilir.

  • John von Neumann'ın dediği gibi: “[..] bir şeyleri anlamıyoruz, onlara alışıyoruz.”

0

Bir bazdan diğerine dönüşümün programlama için çok önemli olmadığını düşünüyorum. Yüksek seviyeli programlamada dönüşümlere ihtiyacınız yoktur (ve bunu yapabildiniz mi, lib fonksiyonları ve hesap makinesi kullanılabilir.) Daha düşük seviyeli programlamaya daldığınızda, artık bir giriş kursunda değilsinizdir.

Temel bir derste ele alınması gereken iki (ilgili) konu önemli olduğunu düşünüyorum.

  1. Kodlama hakkında. Bu matematiksel dönüşümle ilgili değil, bilgiyi (herhangi bir bilgi türü) depolamak için sayıları (herhangi bir sayı türünü) kullanmakla ilgilidir. İsterseniz bunu mors kodu ile gösterebilir ya da numaralarla boyayabilirsiniz. Ancak bilgisayarlar daha çok ikili ve ikili kullandıklarından genellikle onaltılık olarak gösterildiğinden, genellikle şeyler hexy örnekleriyle gösterilmiştir. (Ve bu sırada onlar, bu konuda belirtilen satır sonları hakkında biraz açıklama yapabilirler. Sadece bunların alabileceği çeşitli şekil ve formları tanımanızı öneririm. Bunlardan birkaçı 0x0D, 0x0A , CRLF, '\ n' ve '\ r')

  2. Taşma sorunları. Bir kez daha, bunu hex ile göstermeye gerek yok. Y2k örneğini kullanabilirsiniz (bu hex ile hiçbir ilgisi yoktu) Burada ayrıca en olası çeşitli göstergeleri tanımanızı tavsiye ederim (255, 32767, 65535, 2M14) Neden göstergeler doğrudan bytewise ile bağlantılı? iç depolamada, ancak dönüşüm önemli bir parçası değil.

Bitflags için bilmeniz gerektiğine katılıyorum (çünkü programlama giriş kursunda sabitler olarak adlandırılanlar çok daha öğretici ve kullanışlıdır).


0

Düşük seviyeli gömülü programlamaya giriyorsanız, onaltılık kullanıyor olacaksınız. Donanım kayıtlarındaki bit kalıplarını, bellek dökümlerinde bayt değerlerini belirlemek gibi şeyler için kullanılır. Ayrıca, kullandığınız programlama dilindeki her bit-bilgili operatörü kullanmayı da öğreneceksiniz.

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.