兩個正數相乘,在我們平時的計算中是一定成立的,但是在計算機的世界中卻不一定成立了。我們以八位為例。
首先,在多數計算機中,乘法運算可以變成加法和移位運算。左移一位相當於乘2,右邊補0,如0011 1111(127)左移一位變成0111 1110(254)。右移相當於除2,算數字移時是左邊補充符號位,如1001 0100(-128+16+4=-108)右移一位變成1100 1000(-128+64+8=-56)。如果我們想算3×7,因為7=4+2+1,所以3×7=3×(4+2+1)=3×2²+3×2^1+3×2^0=(3<<2)+(3<<1)+(3<<0)=0000 1100+0000 0110+0000 0011=0001 0101(21)。
因為最高位是符號位,0表示正數,1表示負數。如1000 1000(-120)左移一位後(0001 0000)從負數變成了正數,0111 0111(119)左移一位後(1110 1110)從正數變成了負數。這些都是因為符號位的存在而產生的溢位。對於八位來說,它能表示的數的範圍是-128~127(1000 0000~0111 1111),-120×2和119×2都超過了它的表示範圍,所以會發生溢位,導致有可能出現正數相乘變負數的情況。
現在我們得電腦都是32位或64位的了,可以計算的數也是比較大了,但是當乘出來的結果超出所能表示的範圍時仍然還是會發生溢位,所以要特別注意。
Share Memory協議是怎麼回事
細心的朋友會發現,sql server 2005所支援的網路庫協議中多了乙個share memory協議,那麼它是用在什麼場合的呢?下面是官方文件的一些介紹 從執行在同一臺計算機上的客戶端到 microsoft sql server 的連線使用共享記憶體協議。共享記憶體沒有可配置的屬性。始終會先嘗試...
炒股到底是怎麼回事?
到底是怎麼回事?很久就聽說 有人賺死,有人虧死。只是聽別人說,自己沒多大興趣,因為聽說風險太大,並且虧的可能性很大,呵呵,誰願意去做八成可能虧的買賣呢?但昨天在sohu上看到一條新聞,引起我對它的興趣,所以今天了解了一下。其實我覺得道理好像很簡單,就是你拿一部分錢跟你兄弟說 兄弟,咱們合夥搞一莊生意...
Python裝飾器是怎麼回事?
python裝飾器在python開發過程中,經常被使用。今天看了廖老師的文章之後,對裝飾器有了更深的理解。整理如下。比如有乙個現成的函式,它是有別人寫的,我們只能呼叫它不能修改它。但是我又想在我呼叫它的時候能夠在函式呼叫前和呼叫後做一些事情,對該函式進行功能擴充套件。這種在 執行期間動態增加函式功能...