Ondalık değeri ikiliye ve ikili sayıları ondalık sayıya dönüştürebilirsiniz. Fakat "256" sayısını nasıl temsil edebilirsiniz?
255 = 11111111
1 bayt 8'den fazla ikili basamağa (bit) sahip olamaz. Bu nasıl mümkün olabilir?
Ondalık değeri ikiliye ve ikili sayıları ondalık sayıya dönüştürebilirsiniz. Fakat "256" sayısını nasıl temsil edebilirsiniz?
255 = 11111111
1 bayt 8'den fazla ikili basamağa (bit) sahip olamaz. Bu nasıl mümkün olabilir?
Yanıtlar:
İkili 256'yı nasıl temsil edeceğinizi soruyorsunuz, ancak sanırım insanlar baytların neden depoladığı en büyük sayı 255 olduğunda 256 farklı sayı saklayabileceğini merak ediyorsunuz. aslında ilk sayı, 1 ikinci, 2 üçüncü ... 255 256.
Ayrıca, 11111111 imzalanmamış baytlar için sadece 255'tir. İmzalı bir baytınız varsa (imzalı bir değer negatif değerleri tutabilecek bir değerdir), 11111111 aslında -1'dir. Bkz. Http://en.wikipedia.org/wiki/Two's_complement . İkisinin tamamlayıcısının çalışması, pozitif bir sayıya negatif bir sayı ekleyerek 0 ile sonuçlanır. Diğer insanların söylediği gibi, 11111111'e biraz eklersek ve veri türünüz yalnızca 8 biti destekleyebilirse, son bit taşacak ve sizi bırakacaktır 0. İşaretli baytlar için değerler -128 ile 127 arasında değişir. 128 negatif sayı + 0 + 127 pozitif sayı = toplam 256 sayı.
İmzalı değerler için ilk bit "işaret" bitidir. Bu bit varsa, sayı negatif olur. 10000000 negatif, 01000000 pozitif, 11111111 negatif, 01111111 pozitif ...
Pencerelerde iseniz (belki de mac da vardır), hesap makinesini açabilir, programcı moduna geçirebilir, sbyte'yi seçebilir ve ondalık gösterimleriyle nasıl ilişkili olduklarını görmek için bitlerle oynayabilirsiniz.
Bunu temsil etmek için 2 bayta ihtiyacınız var. 256 = 00000001 00000000
Bildiğiniz gibi 255d (ondalık) 11111111b'ye (ikili) eşittir. Şimdi değere 1 eklemek istiyorsanız, iki olasılık vardır:
Ya sadece 8 bitiniz var. Bu durumda, taşma denir . Böylece "dahili" olarak, 1 eklenecektir 100000000b (9 bitte 256d) elde edilir. Ancak yalnızca 8 bitiniz olduğu için, daha düşük 8 bit "döndürülecektir". Böylece 0d = 0b ile sonuçlanırsınız (çoğu bilgisayar mimarisinde yan not olarak özel bir taşma bayrağı ayarlanır.)
Bunu parmaklarınızla saymakla aynı şekilde düşünün. Parmaklarınızın 9d gösterdiğini düşünün. Şimdi bir parmak daha ekliyorsunuz. Bir 10 daha eklemek istersen ne yaparsın?
Diğer olasılık ise 8 bitten fazla kullanılabilir olmasıdır. Bu durumda, başlangıca bir basamak daha ekleyebilirsiniz ve sonuç gerçekten 100000000b = 256d olacaktır.
Bayt, bir bilgisayar sisteminin (bellek sistemi) ele alabileceği en küçük "birim" dir. Bu, yalnızca tek bir bit bilmek istiyorsanız, bellek sisteminden size bir adresten belirli bir bayt vermesini istemeniz ve daha sonra kendinizle ilgilendiğiniz bitin değerini bulmanız gerektiği anlamına gelir.
Ancak 8 bit bir baytı oluşturduğu gibi, daha büyük veri türleri de vardır. 2 bayt bir kelime (16 bit), iki kelime (dört bayt, 32 bit) çift bir kelime oluşturur. Ve günümüzde standart 64 bit mimarilerin 64 bit veri tipleri bile var (kayıt olarak adlandırılıyor).
Bir bit kaydırma işlemiyle ( ikili gösterimin endianitesine bağlı olarak sol veya sağ ) temsil edebilirsiniz. Örneğin, bu bir astar büyük bir endian temsili için çalışır (önce en önemli bayt):
1 << 8
İmzasız bir bayt yalnızca [0 - 255] aralığını içeren 256 değeri tutabilir. 256 değeri için daha büyük bir değeri, örneğin bir tamsayıyı tutabilen bir veri türü kullanmanız gerekir.