計算機中,數值都是以補碼的形式存在的, 原碼是被人腦識別的,補碼是被機器儲存的。
要求得補碼,首先要確定資料長度(幾位數),首位表示符號位,1為負數,0為正數,後面所有位表示數值。
正數的補碼是自己 負數的補碼為,符號位後面的所有位取反,加1:
[1] => [00000001]原 => [00000001]補
[-5] => [10000101]原 => [11111010]反+[00000001] => [11111011]補
補碼求原碼:補碼-1,取反
[00000001]補 => [00000001]原 == 1
[11111011]補 => [11111011]-1 => [11111011] + [11111111](-1補碼) => [11111010]反 => [10000101]原 == -5
+0 -0 的補碼還是自己
計算機中,只有加法,沒有減法,減法會轉為加負數運算,計算結果保留規定的位數,多餘的數高位溢位。
如1-5在計算機中的運算方式(8位):
[1] == [00000001]原 == [00000001]補
[-5]==[10000101]原==[11111010]+[00000001]==[11111011]補
1-5 == [00000001]補 + [11111011]補
== [11111100]補
== [11111100] -1 (負數原碼=補碼-1,再取反)
== [11111100]+[11111111]==[11111011]
==[10000100]
==-4
補碼的好處:方便計算機進行運算,計算機只能進行相加的運算,把資料都按補碼儲存後,符號位也會參與計算。
邏輯左移、算術左移:右邊補0
邏輯右移:左邊補0
算術右移:首位為1,補1,否則補0
與:&& 如: a、b都為非0,a&b==true 否則a&b==false
或:|| 如:a、b有乙個為非0,a||b==true,否則a||b==false
非:! 如:a為非0,!a==false
異或:^ 如:a、b同為0或同為非0,a^b同==true,否則a^b同==false
把浮點數轉為整數運算,用的時候除以相應倍數。
02 二進位制運算
二進位制加法從低位開始逢二進1,比如29 5 34換成2進製就是11101 00101 100010 對於計算機來說它是只能進行加法運算不能做減法運算的,所以減去乙個二進位制數就等於加上這個數的負數。原碼 通過最高位作為符號位的方法來表示乙個二進位制數的正負,0表示正1表示負 比如 10001和 1...
二進位制運算
運算子 符號含義例子與 兩邊都為真時為真 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 進...