int ve float kullanarak yazabildiğimiz sayılar

Vez'nan

Decapat
Katılım
4 Haziran 2019
Mesajlar
58
Yer
İstanbul
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
C dilini öğrenmeye başladım arkadaşlar ve danışman hoca ilk ödev olarak int ve float değişkenlerini kullanarak en fazla kaç basamaklı sayıları yazabileceğimizi matematiksel olarak bulmamızı istediğini söyledi. Sizden ricam bu sayıların maksimum ve minimum değerlerini nasıl bulurum? Ayrıca maksimum sayı basamağı 32 bit-64 bit sistemlere göre farklılık gösteriyormuş sanırım, bununla ilgili de bir açıklama yapabilirseniz çok sevinirim.
 
Son düzenleyen: Moderatör:
Çözüm
C dilindeki "int" 32 bit signed integerdır.
yani 31 bit sayının değerini (value) MSB ise işareti belirtir. (1 = negative, 0 = positive)
MAX_VALUE olarak ise 2^31 - 1 = 2.147.483.647 ()
MIN_VALUE ise -2^31 = -2.147.483.648 olarak hesaplanabilir

64 bit olayı "long" olarak kullanılıyor. (16 bit olarak ise short)

float, double, long double hesabı için IEEE 754 formatı araştırmanı tavsiye ederim.
işin içine implicit bit giriyor. bilimsel gösterime çevirip value ve fraction hesabını yapıyorsun.

-12.25 için
Sayı negatif yani MSB 1
12 = (1100)2
0.25 = (0.01)2
12.25 = (1100.01)2
Sayının bilimsel gösterimini alıyoruz bunun için 3 basamak kaydırmamız gerek
1.10001x2^3
Bias hesabı: 127 + 2'nin üssü. Bu durumda; Bias = 130. 130'un 2'lik gösterimi (10000010)2
Geri tek birleştirme kaldı
s | exp | fraction
1 10000010 10001000000000000000000
32 tane 1 ya da 0 kullanarak en buyuk hangi sayiyi yazabilirsin? 2 uzeri 32 tane farkli sayiyi gosterebilirsin, ama hangi 1/0 kombinasyonunun neye denk gelecegi sana bagli.

Bu sayiyi nasil reprezente ettigine gore degisir. Signed / Unsigned mi tutacaksin, fraction olacak mi gibi.


Float biraz daha karisik mevzu, sayilar teorisi sebebiyle. Ornegin Python'da print(55/0.55) yaparsan 100 almazsin sonucu. Bunun sebebini anlamak icin sayilar teorisini bilmek gerekiyor.
 
Float olarak tanımlanmış bir değişken 32 bittir. Aynı şekilde int da 32 bittir fakat zamanında C compilerları bilgisayar donanımına göre 16 bit olarak da tanımlayabiliyordu.

Float hesabı için IEEE 754 single presicion'a bak derim. Böyle hesap yapabilirsin.
 
C dilindeki "int" 32 bit signed integerdır.
yani 31 bit sayının değerini (value) MSB ise işareti belirtir. (1 = negative, 0 = positive)
MAX_VALUE olarak ise 2^31 - 1 = 2.147.483.647 ()
MIN_VALUE ise -2^31 = -2.147.483.648 olarak hesaplanabilir

64 bit olayı "long" olarak kullanılıyor. (16 bit olarak ise short)

float, double, long double hesabı için IEEE 754 formatı araştırmanı tavsiye ederim.
işin içine implicit bit giriyor. bilimsel gösterime çevirip value ve fraction hesabını yapıyorsun.

-12.25 için
Sayı negatif yani MSB 1
12 = (1100)2
0.25 = (0.01)2
12.25 = (1100.01)2
Sayının bilimsel gösterimini alıyoruz bunun için 3 basamak kaydırmamız gerek
1.10001x2^3
Bias hesabı: 127 + 2'nin üssü. Bu durumda; Bias = 130. 130'un 2'lik gösterimi (10000010)2
Geri tek birleştirme kaldı
s | exp | fraction
1 10000010 10001000000000000000000
 
Son düzenleme:
Çözüm
C dilindeki "int" 32 bit signed integerdır.
yani 31 bit sayının değerini (value) MSB ise işareti belirtir. (1 = negative, 0 = positive)
MAX_VALUE olarak ise 2^31 - 1 = 2.147.483.647 ()
MIN_VALUE ise -2^31 = -2.147.483.648 olarak hesaplanabilir

64 bit olayı "long" olarak kullanılıyor. (16 bit olarak ise short)

float, double, long double hesabı için IEEE 754 formatı araştırmanı tavsiye ederim.
işin içine implicit bit giriyor. bilimsel gösterime çevirip value ve fraction hesabını yapıyorsun.

-12.25 için
Sayı negatif yani MSB 1
12 = (1100)2
0.25 = (0.01)2
12.25 = (1100.01)2
Sayının bilimsel gösterimini alıyoruz bunun için 3 basamak kaydırmamız gerek
1.10001x2^3
Bias hesabı: 127 + 2'nin üssü. Bu durumda; Bias = 130. 130'un 2'lik gösterimi (10000010)2
Geri tek birleştirme kaldı
s | exp | fraction
1 10000010 10001000000000000000000
biraz anlayamadım rica etsem daha açıklayıcı yazabilir misin c ye yeni başladım ve çok karmaşık geldi bu yazdıkların yardımcı olursan mutlu olurum
 

Geri
Yukarı