數字一切問題的核心原因是:計算機中用二進制來表示整數和浮點小數
整數
計算機整數的特點:
1整數是有範圍的:
2數可以進行位運算
3表示負數的方法
1、整數是有範圍的:
我們首先來看一個程序:
我們看到fact(13)的值比fact(12)的值小,這顯然是不對的。因此我們用int來返回值是造成了超出了範圍。
關於各種類型的數據的範圍如下圖:
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
閱讀更多 黑客小學生藍薩節 的文章