基本型別間的型別轉換 數值型

2021-09-24 20:47:22 字數 2463 閱讀 8563

今天一開啟部落格,看到左上角的園齡5年,目光有些恍然,昔日作為學生上課的情景、已經慢慢變的模糊。是啊、畢業已經3年有餘,時光不再來...

一、原碼和補碼

在步入正文說型別轉換之前,先做乙個小鋪墊,了解一下原碼和補碼。

[注:由於同乙個數字在用不同位數的原碼或補碼表示時、結果不同,所以如無特殊說明、該小節下出現的所有原碼和補碼均為8位]

原碼(true form)是一種計算機中對數字的二進位制定點表示方法。原碼表示法在數值前面增加了一位符號位(即最高位為符號位):

正數該位為0,負數該位為1(0有兩種表示:+0和-0),其餘位表示數值的大小。

1、原碼優點:簡單直觀;例如,我們用8位二進位制表示乙個數,+11的原碼為00001011,-11的原碼就是10001011

2、原碼缺點:原碼不能直接參加運算,可能會出錯。例如數學上,1+(-1)=0,而在二進位制中 00000001+10000001=

10000010,換算成十進位制為-2。顯然出錯了。

補碼(two's complement) 在計算機系統中,數值一律用補碼來表示和儲存。補碼是可以直接參與運算的。原碼和補碼表示方法均有

符號位和數值位兩部分,符號位都是用0表示「正」,用1表示「負」,而數值位表示方法不相。

1、知原碼求補碼

求正數的補碼:正整數的補碼與原碼相同。

【例】+9的補碼是00001001。

求負數的補碼:求負整數的補碼, 在原碼的基礎之上 符號位不變,數值位各位取反,最後整個數加1。

【例】求-5的補碼。

-5的原碼(10000101)→符號位不變(10000101)→數值位取反(11111010)→加1(11111011)

所以-5的補碼是11111011。

【例】數0的補碼表示是唯一的。

[+0]補=[+0]原=00000000

[-0]補=11111111+1=00000000

2、知補碼求原碼

已知乙個數的補碼,求原碼的操作其實就是對該補碼再求補碼:

1)如果補碼的符號位為「0」,表示是乙個正數,其原碼就是補碼。

2)如果補碼的符號位為「1」,表示是乙個負數,那麼求給定的這個補碼的補碼就是要求的原碼。

【例】已知乙個補碼為11111001,則原碼是10000111(-7)。

因為符號位為「1」,表示是乙個負數,所以該位不變,仍為「1」。

其餘七位1111001取反後為0000110;

再加1,所以是10000111。

3、補碼的運算

補碼:

二、整形間的型別轉換

根據上述的8個例子可以得出如下結果:

1、補位式轉化、即少位資料型別向多位資料型別轉化(例1、例2、例3、例4)

所補位與運算元的資料型別有關,與目標資料型別無關。

如果運算元是有符號的資料型別,所補位一律為運算元的符號位,如果運算元是無符號的資料型別,所補位一律為0。

2、截位式轉化、即多位資料型別向少位資料型別轉化(例5、例6)

該轉換方式就是簡單的擷取有效數字(即丟棄高位),和運算元的型別無關。

3、轉換符號位式轉化、即相同位數有無符號資料型別間的轉化(例7、例8)

發生該型別轉化時,只是最高位的意義發生了變化,進而可能導致結果改變。

三、整形與浮點型間的型別轉換有了上面的基礎、再理解整形與浮點型的轉換就容易多了。

由整形向浮點型轉換的時候,如果整形資料的值過大或過小,就可能損失一些最低的有效位,造成精度損失(float的精度只有7位,double15~16位)。

基本型別轉換

1 整型預設int byte a 1 short b 2 int c 3 long d 4 高位元組轉低位元組,低位元組 裝不下 強轉!byte aa byte b short bb short c int cc int d 低位元組轉高位元組,高位元組 裝得下 自轉!long d1 c int c...

基本型別轉換

object 是最終基類,任何形式值都可以轉化成 object形式。基本型別轉換 強制 顯示 轉換和自動 隱式 轉換!裝箱轉換 允許值型別隱式轉化為引用型別 是 強制轉換!轉換方法 1,用 此類是同類之間轉換,內是轉換之後的 資料型別!例如,int i 0 double d 1.23 i int d...

Java基本型別的型別轉換

語法格式 targettype value,其運算子是圓括號。當進行強制型別轉換時,類似於把乙個大瓶子中的水倒入小瓶子中,如果大瓶子中水不多還好,如果大瓶子中水多,將會引起溢位,從而造成資料損失 注 正數在計算機中以原碼存放,負數在計算機中以補碼顯示 float a 5.6 上面一行 會報錯,因為計...