總結一下,有點疑惑。
目錄
1、關於二進位制表示
1、正數補碼
2、負數補碼
3、取反運算
這裡有幾個概念,關於原碼、補碼和反碼
補碼:在計算機系統中,數值一律用補碼來表示(儲存)
(正數的補碼是其原碼。例如十進位制數8,其二進位制原碼表示為00001000,則其補碼即為0000 1000。最高位是符號位,這裡0
000 1000標紅的0是符號位,0表示是正數,如果是1的話就表示負數,例如1000 1000就表示-8。)
不知道大家有沒有疑惑128明明可以表示為10000000,但是這樣的話最高位就是符號位了呀。。。。。。那10000000不是應該表示乙個負數嗎?其實是我自己理解錯了,來解釋一下,首先128是乙個整數,乙個整數有4個位元組,而乙個位元組有8位。所以128的正確原碼應該為00000000 00000000 00000000 100000000,只是平常寫的時候8位能計算得128,所以也就忽略了高位二進位制。但是我又有了乙個疑惑,可以用下面一句話解答:
8位二進位制編碼帶符號數的範圍只有-127~+127(補碼為-128~+127),所以要表示128的話需要9位二進位制編碼。根據這一句話我明白,應該根據整數的大小來確定所需位元組數,而不需要把所有位元組列出來。上面舉例的8,在乙個位元組表示的數字範圍內,所以可以直接用8位二進位制來表示,最高位表示符號位。
所以理解了資料的二進位制表示,下面開始了解。
正數的就比較簡單了 反碼=補碼=原碼
負數就複雜一點了
例如(-4)
首先(4)的二進位制為0000 0100
所以(-4)的二進位制為1000 0100
(-4)的反碼(取反):符號為1不變,緊跟著後面的每一位取反,得1111 1011
(-4)補碼:用反碼加1,二進位制相加,逢2進1。得1111 1100
計算機中的運算子取反是怎樣計算的呢?
例如0011 1100 表示整數60 在計算機中對其執行取反動作後結果是是-61,這是什麼意思呢?
首先我們來取反後得到1100 0011,如果我們單純的加起來就是195,可是並不是-61呀?
ok,我們知道計算機中是以補碼的方式儲存資料的。所以對取反後的二進位製碼我們需要求出其補碼。這時的補碼表示的才是最後的整數。我們來看一下,這裡1100 0011最高位是1,說明這是乙個負數,那麼需要先對這個取反過來的二進位制再取反,符號位不變,得1011 1100,補碼=反碼+1,所以再對1011 1100加1,得1011 1101,這時再轉化成十進位制數就是-61了。
上面的方法用來理解為什麼是-61就行,但是計算的話這裡還有乙個快速的辦法來求解。
取反後得到的1100 0011表示整數195,然後可以直接用195-256=-61
二進位製取反
乙個整數,可以表示為二進位制的形式,請給出盡可能多的方法對二進位制進行逆序操作。例如 10000110 11011000的逆序為 00011011 01100001 分析 題目中說是乙個整數,對它的二進位制進行逆序。並不是乙個01字串,或者01的陣列。那麼我們該如何解決這個問題呢?方法還是比較多的,...
二進位制運算
運算子 符號含義例子與 兩邊都為真時為真 1 1 1或 任何一邊為真時為真1 非取反 如果1則為0 如果0為1 1 0 異或 兩邊相同為1 兩邊不同為0 1 1返回false 1 2返回true 運算子符號含義 例子邏輯與 判斷兩邊 都為真時為真 true true true或 判斷兩邊 任何一邊為...
二進位制運算( )
負數轉化二進位制步驟 將負數取絕對值,得到其絕對值的二進位制 6取絕對值為6,6的二進位制 0110,然後補充0110位32位 000 000 0110 一共32位,即0110前面還有28個0 然後每位取反 111 111 1001 一共32位 接著對上面得到的二進位制 111 111 1001 進...