《程序世界》筆記5 整數與浮點小數(上)

數字一切問題的核心原因是:計算機中用二進制來表示整數和浮點小數


整數

計算機整數的特點:

  • 1整數是有範圍的:

  • 2數可以進行位運算

  • 3表示負數的方法

1、整數是有範圍的:

我們首先來看一個程序:

《程序世界》筆記5 整數與浮點小數(上)

我們看到fact(13)的值比fact(12)的值小,這顯然是不對的。因此我們用int來返回值是造成了超出了範圍。

關於各種類型的數據的範圍如下圖:

《程序世界》筆記5 整數與浮點小數(上)

2038年危機?

實際上整數範圍的問題,是連專家也可能會出錯的難題。

比如,在Linux等UNIX系列操作系統中,時刻是以從Epoch到現在為止的秒數來表示的,Epoch是一個特定的時間(世界協調時間1970年1月1日凌晨0時0分),但存放這個秒數的是32位整數,所以到2038年1月19日11時14分7秒(北京時間),32位帶符號整數所能表示的最大整數就到頭了。如果像現在這樣,2038年以後的時刻就不能表示了。30年後會像2000年問題那樣引起喧囂嗎?

2、數可以進行位運算

c語言,ruby語言和python語言等都可以進行位運算,他們的位運算符都是類似的。

&位邏輯與

| 位邏輯或

^位邏輯異或

~位邏輯反

>> 右移

<< 左移

3、表示負數的方法

負數用補碼的方式表示,二進制的補碼就是反碼+1。

這裡麵包括兩個問題:

A已知負數,我們拿-2舉例,求其二進制表示。

解:

找到該負數的絕對值2;

將絕對值表示為二進制數:00000010

求得該二進制數的反碼:11111101

將反碼+1得到:11111110

B已知二進制數,比如11110010,求其負數的十進制。

解:

求得該二進制數的反碼:00001101

將反碼+1得到:00001110

算出十進制數:2+4+8=14

得到負數:-14


分享到:


相關文章: