Merhaba TürkHackTeam Üyeleri.
Bu Konumda Sizlere Signed Ve Unsigned Sayılardan Bahsedeceğim.
Signed Ve Unsigned Nedir?
Signed ve unsigned'ı anlatmaya geçmeden önce sizlere ikilik yani binary sayı sisteminden bahsetmek istiyorum. Bilgisayarlar daha doğrusu elektronik sistemler binary sayı sistemini kullanırlar. Hani hep duyduğumuz, gördüğümüz, bilgisayar denilince ilk akla gelen 0 ve 1 rakamları binary sistemini oluşturur. Binary sisteminde her şey 0 ve 1 rakamlarının farklı durumlarda yan yana gelmesiyle oluşur. Bilgisayarların bu sayı sistemini kullanmasının sebebi ise elektronik devrelerde bu sistemin kolay uygulanabilir olmasıdır. Zira elektrik akımının gerilmesi 1'i gerilmemesi 0'ı temsil eder. Ve böylelikle elektronik devreler bu sayı sistemi ile kolaylıkla kontrol edilebilir.
Biz insanlar günlük hayatımızda 10'luk sayı sistemini yani decimal sayı sistemini kullanırız. Ve bu onluk tabanda sayılar 0,1,2,3,4,5,6,7,8,9 rakamları kullanılarak ifade edilir. Bu sayı sistemine 10'luk sayı sistemi denmesinin sebebi ise her basamağın 10'un kuvvetleri ile çarpılmasından dolayıdır. Mesela 2020 sayısının değeri aşağıdaki şekilde elde edilir.
2020 = 2x10³ + 0x10² +2x10¹ + 0x10°
İkilik sayı sisteminde ise sadece 0 ve 1 rakamları kullanılır. Dolayısıyla da her basamak 2'nin kuvvetleri ile çarpılır. Bu 0 ve 1 rakamlarının her birine bit denir. Mesela 20 sayısının binary karşılığı 10100 şeklindedir ve aşağıdaki gibi ifade edilir.
10100 = 1x2⁴ + 0x2³ + 1x2² + 0x2¹ + 0x2°
Bu şekilde bizim bilgisayarda yaptığımız her şey ikilik tabanda yürütülür ve elektronik devreler birbirleri ile 0 ve 1 rakamlarını kullanarak haberleşip işlemlerini yaparlar.
Şimdiye kadar bu sayıların işaretlerinden bahsetmedik. Yani sayıların + mı yoksa - mi olduğundan bahsetmedik. İşaretlerinden bahsedecek olduğumuzda ise, işe signed (işaretli) ve unsigned (işaretsiz) terimleri giriyor. Signed sayılar içerisinde negatif(-) ve pozitif(+) değerleri tutabilirken unsigned sayılar 0 ve pozitif(+) değerleri tutabiliyor.
Bir sayının pozitif mi yoksa negatif mi olduğunu bulmak içinde sayının ilk bitine bakarız. Eğer ilk bit 0 ile başlıyorsa bu sayı pozitiftir, 1 ile başlıyorsa da negatifdir. Mesela 8 bitlik aşağıdaki sayıları inceleyelim.
1 = 0000 0001
2 = 0000 0010
Bu sayıların ikiside pozitif çünkü ilk bitleri 0 ile başlıyor.
Peki bu sayıları negatife nasıl çevirebiliriz. Negatife çevirmek içinde bitlerin tersi alınıp sayıya 1 eklenir. Mesela 3 sayısının negatifi şu şekilde bulunur.
+3 = 0000 0011 -> 3 sayısı
= 1111 1100 -> 3 sayısının değili
= 1111 1101 -> 3 sayısının değiline +1 eklenmesi
-3 = 1111 1101 -> -3 sayısı
Gördüğünüz gibi pozitif sayının ilk biti 0 ile başlarken negatif sayının ilk biti 1 ile başlıyor.
Bir örnek yapalım ve 11101011001 binary sayısının değerinin signed ve unsigned sayı sistemine göre decimal karşılıklarını bulalım.
Unsigned için bu sayının değeri decimal sistemde 1881 çıkıyor. Nasıl hesaplandığını aşağıya bakarak öğrenebilirsiniz.
11101011001 = 1x2¹º + 1x2⁹ + 1x2⁸ + 0x2⁷ + 1x2⁶ + 0x2⁵ + 1x2⁴ + 1x2³ + 0x2² + 0x2¹ + 1x2° => 1024 + 512 + 256 + 0 + 64 + 0 + 16 + 8 + 0 + 1 = 1881
Signed için ise bu sayının değeri -167 çıkıyor. Nasıl hesaplandığını aşağıya bakarak öğrenebilirsiniz. Signed hesaplama yaparken ilk bit işaret biti olarak alınır. Ve ilk bit 0 ise ilk bitin basamağı + olarak işlem yapılır. Eğer ilk bit 1 ise de ilk bitin basamağı - olarak işlem yapılır. Birnevi signed sayı türünün decimal karşılığı hesaplanırken ilk bit 0 ise unsigned ile aynı şekilde hesaplanır, 1 ise de ilk basamağın önüne eksi konarak hesaplanır.
11101011001 = -1x2¹º + 1x2⁹ + 1x2⁸ + 0x2⁷ + 1x2⁶ + 0x2⁵ + 1x2⁴ + 1x2³ + 0x2² + 0x2¹ + 1x2° => -1024 + 512 + 256 + 0 + 64 + 0 + 16 + 8 + 0 + 1 = -167
Bu signed ve unsigned sayı türleri birçok programlama dilinde veri tiplerinde kullanılır. Mesela char veri tipi 1 bayt yani 8 bitten oluşur. Örneğin yukarıda 1 sayısının binary karşılığını göstermiştim. Bu binary karşılığını 8 bit ile yani 0000 0001 olarak gösterdim. Peki bu char veri tipinde maksimum ve minimum değerleri bulmak istediğimizde signed ve unsigned için ayrı ayrı değerler buluruz. Zira unsigned sıfır ve pozitif sayılardan oluşurken signed sayılar pozitif ve negatif sayılardan oluşabiliyor. Char veri tipinde yani 8 bitlik bir binary sisteminde alabileceğiniz maksimum ve minimum değerler aşağıdaki gibidir.
Signed char da alınabilecek maksimum değer => 0111 1111 yani 127 dir.
Signed char da alınabilecek minimum değer => 1000 0000 yani -128 dir.
Unsigned char da alınabilecek maksimum değer => 1111 1111 yani 255 dir.
Unsigned char da alınabilecek minimum değer => 0000 0000 yani 0 dır.
Okuduğunuz İçin Teşekkür Ederim.
Esenlikle Kalın..
Saygılarımla:Smiley1021:
Moderatör tarafında düzenlendi:


