標籤:mil family 有符號 ali 正數 關於 運算 數實值型別 bsp
關於反碼補碼的知識總結
基本概念正數(定點小數、定點整數): 原碼,補碼,反碼相同; 負數(定點小數、定點整數): 反碼:保持原碼符號位不變,數值位取反 補碼:第一種方法給反碼的最低位+1就可以啦,若數值最高位有進位則丟棄(不向符號位進位) 第二種方法以原碼為基礎,符號位不變,其他從最低位開始,直到遇到第一個1之前什麼都不變,該位之前位依次按位取反,即(推薦) 原碼: ([符號位][***][1][n*0]),其對應補碼僅需對[***]部分依次取反即可。 例如,當編碼總位元為8時有: +127的原碼、反碼、補碼都為:0 1111111 -127的原碼、反碼、補碼依次為:1 1111111、1 0000000、1 0000001 已知負數的補碼,如何擷取其十進位數?1.先對各位取反,包括符號位2.轉換為十進位數3.添加負號並減1例如:對於11111010,取反得00000101,對應十進位數為5,由第三步轉換可得到結果:-6
為何n位位元據的表示範圍是[-2^(n-1),2^(n-1)-1]?以8位二進位為例,-128=(-1)+(-127)=([1000 0001]+[1111 1111])原=([1111 1111]+[1000 0001])補=([1000 0000])補,所以在補碼運算結果中,([1000 0000])補就表示-128,這就是多出來的一位元據。符號擴充用於在數實值型別轉換時擴充二進位位的長度,以保證轉換後的數值和原數值的符號(正或負)和大小相同,一般用於較窄的類型(如byte)向較寬的類型(如int)轉換。擴充二進位位長度指的是,在原數值的二進位位左邊補齊若干個符號位(0表示正,1表示負)。Java的數實值型別轉換規則一<Java解惑>總結1.如果最初的數實值型別是有符號的,那麼就執行符號擴充;如果是char類型,那麼不管它要被轉換成什麼類型,都執行零擴充。2.如果目標類型的長度小於源類型的長度,則直接截取目標類型的長度。例如將int型轉換成byte型,直接截取int型的右邊8位。
反碼補碼報告