Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Fonksiyon Kullanmadan 16lık>10luk

Konu, 'PHP' kısmında 0nurSatilmis tarafından paylaşıldı.

  1. 0nurSatilmis

    0nurSatilmis Yeni Üye

    Kayıt:
    14 Haziran 2008
    Mesajlar:
    8
    Beğenilen Mesajlar:
    0
    Elimde 16lık Sistemi 10luğa çeviren kodlar var.

    Ama Fonksiyonsuz bu işlemi yapmam gerekli. Bi Abi Bana String Ile yapabileceğimi söyledi.

    yardımlarınızı bekliyorum.
     
  2. Bigsnow

    Bigsnow Daimi Üye

    Kayıt:
    20 Mart 2007
    Mesajlar:
    1,083
    Beğenilen Mesajlar:
    1
    Meslek:
    Öğrenci
    Şehir:
    Antalya
    16'lık sistem ne 10'luk sistem ne hiç bişi anlamadım.

    Ayrıyeten hepsini kalın yazmaktan ne zevk alıyosun ?
     
  3. akyor35

    akyor35 Daimi Üye

    Kayıt:
    7 Nisan 2005
    Mesajlar:
    1,510
    Beğenilen Mesajlar:
    0
    Şehir:
    İstanbul
    hexdec() foksiyonu ile yapabilirsin
    PHP:
    <?
    echo 
    hexdec('aa');
    ?>
     
  4. 0nurSatilmis

    0nurSatilmis Yeni Üye

    Kayıt:
    14 Haziran 2008
    Mesajlar:
    8
    Beğenilen Mesajlar:
    0
    bigsnow> 16lık Sayı Sistemi, 10luk Sayı sistemi.

    akyor: Çok Teşekkür ederim Ama Fonksiyonsuz Bir Yolu Yok Heralde?
     
  5. akyor35

    akyor35 Daimi Üye

    Kayıt:
    7 Nisan 2005
    Mesajlar:
    1,510
    Beğenilen Mesajlar:
    0
    Şehir:
    İstanbul
    @0nurSatilmis
    elinde olan kodların kullanıcı tanımlı fonksiyonlar olduğunu söylüyorsun... php bunun için kendi bir fonksiyon hazırlamış zaten... nasıl bunu fonksiyonsuz dönüştürsün istiyorsun ?.. yani tam olrak yapmak istediğiniz nedir?
     
  6. 0nurSatilmis

    0nurSatilmis Yeni Üye

    Kayıt:
    14 Haziran 2008
    Mesajlar:
    8
    Beğenilen Mesajlar:
    0
    <?php
    echo dechex(10) . "\n";
    echo dechex(47);
    ?>

    Bunları Fonksiyonsuz yapmamın yolu yokmu yani :(

    Mesela Gelen Sayıyı Ilk Değişkene atasak ?
     
  7. akyor35

    akyor35 Daimi Üye

    Kayıt:
    7 Nisan 2005
    Mesajlar:
    1,510
    Beğenilen Mesajlar:
    0
    Şehir:
    İstanbul
    fonksiyonsuz diyerekten ne demek istiyorsun onu bi anlasam.. yani php nerden anlıcak senin o gelen hexadecimali decimal olarak istediğini.. yazdırmak yerine değişkene atamak istiyorsan...

    $dec=dechex(10);
     
  8. 0nurSatilmis

    0nurSatilmis Yeni Üye

    Kayıt:
    14 Haziran 2008
    Mesajlar:
    8
    Beğenilen Mesajlar:
    0
    <?php
    $dec=dechexh(10);
    print '10Luk Sistemde: $dec';
    end;
    ?>

    Bu şekildemi?
     
  9. akyor35

    akyor35 Daimi Üye

    Kayıt:
    7 Nisan 2005
    Mesajlar:
    1,510
    Beğenilen Mesajlar:
    0
    Şehir:
    İstanbul
    gibi...
    PHP:
    <?php
    $dec
    =dechex(10);
    echo 
    '10Luk Sistemde: '.$dec
    ?>
     
  10. Coldplay

    Coldplay Daimi Üye

    Kayıt:
    23 Haziran 2008
    Mesajlar:
    1,448
    Beğenilen Mesajlar:
    0
    Kod olarak yazamam ama mantik olarak anlatayim:

    Öncelikle 16lik ve 8lik sistemde sayilar PHP'de asagidaki gibi gösterilir:

    $a = 0123; // Sekizlik sistemde
    $a = 0x1A; // Onaltilik sistemde

    Bir sayi degiskeninin basina 0 (sifir) yazarsan o sayi sekizlik sistemdedir. Eger 0x (sifir iks) yazarsan o sayinin 16lik sistemde oldugunu belirtmis olursun (0-9 arasi sayilar ve A-F rakamlari kullanilir). Böyle tanimladigin degiskenleri ekrana yazdirirken veya onlarla islem yaparken PHP'nin bu sayilarin 10luk sistemde olmadigini otomatik olarak anlamasi gerekir.

    Ama sen illa ki elimde string var, ben sayiyi ondan cevirecegim diyorsan konuyu biraz daha acayim.

    16lik sistemde rakamlari taniyacak olursak:
    0-9 arrasi degerler onlukla ayni
    10'dan 15'e kadar olan degerlerse:
    A = 10
    B = 11
    C = 12
    D = 13
    E = 14
    F = 15

    10'luk sistem basamaklari sagdan baslarsak 1'ler 10'lar 100'ler diye gidiyor yani sagdan sola bir basamak gectikce hep 10'un üssünü sifirdan baslayarak 1 arttiriyorsun

    Mesela: 5632 = (10³x5) + (10²x6) + (10x3) + (1x2)
    Belki matematiksel gösterimi anlamayanlar olur diye olarak yukaridaki denklemde üslü terimleri okunu$uyla tekrar veriyorum:
    5632 = (10üssüÜc x 5) + (10üssüIki x 6) + (10üssüBir x 3) + (10üssüSifir x 2)

    16lik sayilarda da ayni sekilde tek yapman gereken rakam degerlerini 16nin üsleri olan basamak degerleriyle carpmak. Yukaridaki sayi o zaman 16lik sistemde söyle cözümlenirdi:

    0x5632 = (16³ x 5) + (16² x 6) + (16 x 3) + (1 x 2)


    Baska örnek verirsem (A-F arasi harflerle ilgili):

    16lik cözümleme :
    0xAF6C = (16³ x A) + (16² x F) + (16 x 6) + (1 x C)
    10luk sistemde cözümleme (A-F arasi degerleri rakamsal degerleriyle yazarsak)
    0xAF6C = (16³ x 10) + (16² x 15) + (16 x 6) + (1 x 12)
    Bunlari toplarsak sonucta 0xAF6C sayisinin 10luk sistemde 44908 oldugunu buluruz.

    Sanirim bu kadar matematik bilgisi yeter. Programi nasil yazabilecegine gelirsek (kod yok tabi ki yine mantik olarak):

    Elindeki string degiskeninden karakterleri teker teker okuyup sagdan hangi sirada (basamakta) oldugunu belirle. en sagdaki 16üssüSifir, onun bir yanindaki 16üssüBir vs. Sonra bu basamak degerleriyle sayi degerlerini carp. en son olarak da hepsini toplayacaksin yukaridaki denklemler gibi. Tek dikkat etmen gereken eger okudugun karakter A-F arasinda ise onun 10luk sistemdeki sayi degerlerini kullanman (yukaridaki tabelada).

    Umarim yardimci olmustur.

    Kolay gelsin!