執行如下**得到結果
你猜是多少呢?
嗯你沒有看錯得到的答案是57.
所以為什麼會出現這種情況呢?首先需要**的是0.58這個數字是如何在計算機中儲存的。我們一般用下面格式表示浮點數。 sp
m 其中s是符號位,p是階碼,m是尾數。
單精度浮點數是32位,雙精度浮點數是64位。 s
pm表示公式
偏移量1823
(-1)s*2(p-127)*1.m
1271
1152
(-1)s*2(p-1023)*1.m
1023
。以雙精度浮點數為例,可以得到其二進位制表示格式如下。
s(第64位)
p(第52到63位)
m(第0到51位)
這個坑我覺得我要填不完了。。總而言之,0.58用二進位制來表示的話是無限長的值。引用一句話,
你看似有窮的小數, 在計算機的二進位制表示裡卻是無窮的。
這個坑填完了。知道了這個問題,那麼很容易就知道最後的結果為什麼是57了,0.57999999999*100那麼取整數就是57.
負數在計算機中的表示
今天,老大讓我調查乙個浮點數轉換為整數的問題。自己就查了些資料,順便複習一下原碼 反碼和補碼。原碼 將乙個整數,轉換成二進位制,就是其原碼。如單位元組的5的原碼為 0000 0101 5的原碼為1000 0101。反碼 正數的反碼就是其原碼 負數的反碼是將原碼中,除符號位以外,每一位取反。如單位元組...
負數在計算機中的表示
原碼 將乙個整數,轉換成二進位制,就是其原碼。如單位元組的5的原碼為 0000 0101 5的原碼為1000 0101。反碼 正數的反碼就是其原碼 負數的反碼是將原碼中,除符號位以外,每一位取反。如單位元組的5的反碼為 0000 0101 5的原碼為1111 1010。補碼 正數的補碼就是其原碼 負...
負數在計算機中如何表示?
負數在計算機中如何表示?舉例來說,8在計算機中表示為二進位制的1000,那麼 8怎麼表示呢?很容易想到,可以將乙個二進位制位 bit 專門規定為符號位,它等於0時就表示正數,等於1時就表示負數。比如,在8位機中,規定每個位元組的最高位為符號位。那麼,8就是00001000,而 8則是10001000...