Standart C De Bir Soru
-
Arkadaşlar bildiğiniz gibi c de değişkenler arasında unsigned int ve int bulunmakta.
Normalde bu nesnelerden signed int de ilk dijit sayının artı yada eksi olduğunu belirtmektedir örneğin:
10000001=-1
00000001=+1
Ve bildiğiniz gibi unsigned int değişkeninde 8 dijitin tamamı kullanılmaktadır. Bunun yardımıyla pozitif alandan daha fazla sayıyla uğraşmamızı sağlamaktadır.
Şimdi sorum şu. Unsigned int de signed int da bellekte (platform ve derleyiciye göre değişiyor şu an visual studio ve windows vista da) 32 bit yani 4 byte yer kapladığına göre. Program bir signed int veri tipini nasıl olupta unsigned int olarak sanmıyor.
Yani normalde signed int
1000 0001=-1 olmasına rağmen neden 128+1=129 sanmıyor. (1 byte olmadığını biliyorum örnek olarak yazdım)Sonuçta her ikiside 4 byte yer kaplıyor ve unsigned veya signed olduğunu belirten birşey bulamadım.
C ile ilgilenenler bu soruma yanıt verirse çok sevinirim.
-
Asm boyutuna inersek. Sign flag belirler.
-
Hocam daha c yi çözemedik asm inmesek ? :D Bu ikisi arasındaki farkı ayırt etmesi için 4 byte dan daha fazla yer kaplaması gerekmez mi? Signed yada unsigned olduğunu belirten bir belirtecin daha bellekte yer kaplaması gerekmez mi?
-
Tayok bunu yazdı:
-----------------------------
Arkadaşlar bildiğiniz gibi c de değişkenler arasında unsigned int ve int bulunmakta.
Normalde bu nesnelerden signed int de ilk dijit sayının artı yada eksi olduğunu belirtmektedir örneğin:
10000001=-1
00000001=+1
Ve bildiğiniz gibi unsigned int değişkeninde 8 dijitin tamamı kullanılmaktadır. Bunun yardımıyla pozitif alandan daha fazla sayıyla uğraşmamızı sağlamaktadır.
Şimdi sorum şu. Unsigned int de signed int da bellekte (platform ve derleyiciye göre değişiyor şu an visual studio ve windows vista da) 32 bit yani 4 byte yer kapladığına göre. Program bir signed int veri tipini nasıl olupta unsigned int olarak sanmıyor.
Yani normalde signed int
1000 0001=-1 olmasına rağmen neden 128+1=129 sanmıyor. (1 byte olmadığını biliyorum örnek olarak yazdım)Sonuçta her ikiside 4 byte yer kaplıyor ve unsigned veya signed olduğunu belirten birşey bulamadım.
C ile ilgilenenler bu soruma yanıt verirse çok sevinirim
-----------------------------Hocam orda tutulan verinin türü de bi yerde tutuluyor sonuçta.. :)
Senin mantıkla gidecek olursak 1 karakter de 1 byte yer kaplıyor, ve sistem 4 bayt'ı neden 4 harf olarak algılamıyor mesela? :)
-
Tayok bunu yazdı:
-----------------------------
Hocam daha c yi çözemedik asm inmesek ? :D Bu ikisi arasındaki farkı ayırt etmesi için 4 byte dan daha fazla yer kaplaması gerekmez mi? Signed yada unsigned olduğunu belirten bir belirtecin daha bellekte yer kaplaması gerekmez mi
-----------------------------Hayır. Bitlere göre bayrak durumu değişiyor zaten. Sen signed yaptığında da unsigned yaptığında da aynı boyutta yer kullanıyorsun zaten. Unsignedsa - lere girmiyorsun. Ama - lere ineceğin kadar fazlasını kullanma imkanın oluyor.
-
Şimdi anladım olayı. Olay tip belirleyicilerinden kaynaklanıyor %u veya %d arasındaki fark. Yani değişkeni okuturken . %d diye okutursan verinin signed olduğu varsayılarak okutuluyor. Ama yok %u dersem unsigned int olduğu varsayılarak okutuluyor. Teşekkürler.
-
Tayok bunu yazdı:
-----------------------------
Şimdi anladım olayı. Olay tip belirleyicilerinden kaynaklanıyor %u veya %d arasındaki fark.
-----------------------------Aynen öyle hocam :)
Eğer ki %s ile basmaya kalkarsan da \0'ın degerini gorene kadar byte byte basar veriyi mesela :)