C Programlama Dili - 0 - Sayı Sistemleri ve ASCII

Programlama ve Script dilleri konusunda bilgi paylaşım alanıdır.
Cevapla
Kullanıcı avatarı
esatiz
Gigabyte3
Gigabyte3
Mesajlar: 2647
Kayıt: 30 Eki 2020, 11:18
cinsiyet: Erkek
Teşekkür etti: 325 kez
Teşekkür edildi: 269 kez

C Programlama Dili - 0 - Sayı Sistemleri ve ASCII

Mesaj gönderen esatiz »


İkilik (Binary) Sayı Sistemi

Bilgisayarların 0 ve 1'lerden oluştuğunu mutlaka duymuşsunuzdur. İşin elektronik kısmıyla çok ilgilenmeyeceğiz, yine de yazı sonunda ekstra linkler vereceğim, incelersiniz. İkilik sayı sisteminde sadece 0 ve 1 kullanılır. Yani 2 farklı rakam. Bunun sonucunda İKİLİK taban ortaya çıkar ve yeni sayımız bitlerden oluşur.

Hesaplanması
-----------------

11111111
Her bit, 2'nin gitgide artan kuvvetlerini temsil eder. Bütün bitler toplanır. Sağdan sola doğru değerler artar. En sağdaki bit 2 üzeri 0'dır çünkü 0. bittir. Ayrıca bazı matematikçiler ve programcılar saymaya sıfırdan başlar.

... + 1 * (2 üzeri 0)
... + 1 * (2 üzeri 1) + 1 * (2 üzeri 0)
... + 1 * (2 üzeri 2) + 1 * (2 üzeri 1) + 1 * (2 üzeri 0)
diye gider.

Örneğin 10110101 sayısına bakalım. Sağdan sola toplayalım.
(1 * 1) + (0 * 2) + (1 * 4) + (8 * 0) + (1 * 16) + (1 * 32) + (0 * 64) + (1 * 128) = 181 etti. Bakalım doğru mu?

Resim

Teklik veya Çiftiği belirleyen bit
----------------------------------------

0. bittir. "Sıfırıncı" diye bir kavram gündelik hayatımızda yok ama burada işimize yarıyor. Bize, toplamanın 2 üzeri 0'dan başladığını hatırlatır. Artık, "En sağdaki 2 üzeri kaçtı?" diye sorulan bir sorunun cevabın 0 olduğunu biliyorsunuz :kafasalla:

Herhangi bir sayı üzeri 0 her zaman 1'dir. (Sıfır üzeri sıfır belirsizliği hariç) Kanıtlayalım isterseniz:
5 üzeri 3 = 125
bunu 5'e bölersek üs 1 azalır.

5**3
/
5**1

5 üzeri 2 = 25 oldu.
tekrar bölelim

5**2
/
5**1

5 üzeri 1 = 5 oldu.
Beşi beşe bölersek 1 gelir.

5**1
/
5**1

5**0 = 1 gelir.
İkilik tabandaki tabanlara bir bakalım:
128 64 32 16 8 4 2 1

Sayıya en sağdaki bit dışındaki bitler her zaman çift bir sayı ekler. 0 veya 2, 0 veya 4, 0 veya 8 gibi...
Ama en sağdaki bit 0 veya 1 ekler, sayının tek olup olmaması 0. bite bağlıdır.

Unsigned kavramı
----------------------

Unsigned işaretsiz demektir. Bir sayının önüne işaret koymazsak ne olur? Günlük hayattan düşünün. Pozitif olur. +5 diyor musunuz? :-D Demek ki unsigned sayılar daima pozitif sayılarmış.

İşareti belirleyen bit en soldaki bittir. Üstteki örnekte kullandığımız sayı işaretsizdir. En solundaki bit negatiflik pozitiflik belirtmez, toplanacak değere büyük bir ekleme yapar, ya da yapmaz. Neden büyük?

Fark ettiyseniz bir bit, kendinin sağında kalanlarının toplamından hep 1 fazla oluyor 8)
111
421

4 = 3 + 1

1111
8421

8 = 4 + 2 + 1 + 1

Unsigned bir sayımız olsun, tüm bitleri 1 en soldaki 0 ise;
7.biti de 1 yaparsak sayımız neredeyse 2 KAT büyür. 2 KATının 1 fazlası olur tahmin edebileceğiniz gibi.

127 = 01111111
255 = 11111111 = 128 + 127
255 = 11111111 = (127 + 1) + 127

Onluk sayının ikilik tabandaki bir sayıya dönüştürülmesi (DEC to BIN)
------------------------------------------------------------------------------------

Elimizde 47 sayısı olsun. Bunu bölüm 0 olana kadar, sürekli 2'ye böleceğiz.

47 / 2 = 23 kalan 1
23 / 2 = 11 kalan 1
11 / 2 = 5 kalan 1
5 / 2 = 2 kalan 1
2 / 2 = 1 kalan 0
1 / 2 = 0 kalan 1

Sonra aşağıdan yukarıya doğru, kalanları yan yana yazıyoruz: 101111
Bir şey fark ettiniz mi? ;)

Tamsayılara binary olarak değer vermek isterseniz 0b... formatını kullanmalısınız:
(Fareyi sayının üzerinde tutarsak Visual Studio bize onluk tabandaki değerini söyler)

Resim

Sekizlik (Octal) Sayı Sistemi

Bu sayı sistemi de basittir. 01234567 rakamlarıyla sekizlik tabanda işlem yapılır. C dilinde sayıya octal olarak değer vermek için octal ifadenin başına SIFIR koyulur.
Dikkat: Onluk tabandaki sayıların önüne 0 koymamanız gerektiğini tahmin etmişsinizdir değil mi :arrow:

Resim

Onluk sayının sekizlik tabandaki bir sayıya dönüştürülmesi (DEC to OCT)
----------------------------------------------------------------------------------------

İkilik tabanda ne yaptıysak aynısını burada da yaparız. Örnek olarak 100 sayısına bakalım:

100 / 8 = 12 kalan 4
12 / 8 = 1 kalan 4
1 / 8 = 0 kalan 1

Tersten yazıyoruz. 144. 0144 sayısı onluk tabanda 100 demekmiş. Kanıt:
(4 * 1) + (4 * 8 ) + (1 * 64) = 4 + 32 + 64 = 100

Onluk (Decimal) Sayı Sistemi

Günlük hayatımızda kullandığımız sayı sistemidir. Başka var mı diye düşünürsek, saat için 12'lik veya 24'lük özel sayı sistemi var. Aslında onluk tabandaki rakamları kullandığımız için 12'lik / 24'lük diyebilir miyiz bilmiyorum, neyse.

Bu sayı sistemini zaten bildiğimiz için pek bir olayı yok. 0123456789 rakamlarıyla oluşturulan 10 farklı rakam kullanılmasından dolayı ONLUK taban'da sayılar oluştururuz.
Diğer sayı sistemlerinde gördüğümüz gibi, en sağdaki ... üzeri SIFIR olacak.

9876 sayısına bakalım.

6 * (10 üzeri 0) + 7 * (10 üzeri 1) + 8 * (10 üzeri 2) + 9 * (10 üzeri 3)
6 + 70 + 800 + 9000 = 9876 olur.
C dilinde ve diğer dillerde bu sayıları gündelik hayattaki gibi ifade ederiz.

Resim

Onaltılık (Hexadecimal) Sayı Sistemi

Bazı internet sitelerinde arama yaptığınızda hiç adres çubuğuna baktınız mı? %20 diye bir ibare gördünüz mü? Sanki %20 yerine boşluk tuşuna basmıştınız değil mi? Bu yazının sonundaki linke de bir göz gezdirin.

0123456789ABCDEF şeklinde 16 farklı rakam ve harf ile oluşturulan bir sayı sistemidir.
A = 10
B = 11
C = 12
D = 13
E = 14
F = 15
değerlerini temsil eder.

GUID stringleri de F'den sonraki harfleri içermezler ;)
https://www.sordum.net/66528/globally-u ... lusturulur

C dilinde ve diğer pek çok dilde onaltılık ifade 0x... formatıyla belirtilir:

Resim

ASCII

Eski bir karakter tablosudur, halen kullanılır.

Resim

Birkaç ekleme yapmayı düşünüyorum :kafasalla:

https://www.asciitable.com
https://www.asciitohex.com
https://wikipedia.org/wiki/ASCII

Kod: Tümünü seç

https://linkedin.com/pulse/merakl%C4%B1s%C4%B1na-bilgisayar-ve-10-mehmet-selcuk-karaca
En son esatiz tarafından 11 May 2022, 09:11 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
ozgutozkan
Kilobyte4
Kilobyte4
Mesajlar: 695
Kayıt: 27 Mar 2022, 20:07
Teşekkür etti: 172 kez
Teşekkür edildi: 240 kez

Re: C Programlama Dili - 0 - Sayı Sistemleri ve ASCII

Mesaj gönderen ozgutozkan »

Windows hata kodları 0x le başlaması 16 lık sayı sisteminde belirtildiği içinmiş. Bak buradan da bunu anladım. Derste anlatırken kullanırım ben bu detayı.
Teşekkürler.
Kullanıcı avatarı
TRWE_2012
Exabyte1
Exabyte1
Mesajlar: 10961
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 889 kez
Teşekkür edildi: 1919 kez

Re: C Programlama Dili - 0 - Sayı Sistemleri ve ASCII

Mesaj gönderen TRWE_2012 »

Güzel bir forum konusu olmuş
Cevapla