2 4 兩種資料型別轉換

2021-10-05 10:18:39 字數 2773 閱讀 9554

2.4 資料型別的轉換

目的:進行不同資料型別之間運算。

種類:自動型別轉換 和 強制型別轉換

自動型別轉換

​ 自動向上型別轉換(小範圍型別轉為大範圍型別)

byteshort(char) →intlongfloatdouble

​ 語法:

​ [小範圍型別] 變數1 = 變數1的值

​ [大範圍型別] 變數2 = 變數1

eg:

package datatype;

public

class

typeconversion

}

輸出結果:

2

9934

56.0

2.299999952316284

注意:1.byteshortchar參與資料型別時,會先轉為int型別再進行運算。

eg:

//錯誤

byte by1=5;

byte by2=4;

byte by3=by1+by2;

//報錯:不能從int轉換為byte

system.out.

println

(by3)

;//正確

final

byte by1=5;

final

byte by2=4;

//final修飾變數,使變數不會先轉為int型別再進行運算。

byte by3=by1+by2;

system.out.

println

(by3)

;

​ 2.char比較特殊,char可以自動轉換成intlongfloatdouble,不能自動轉 換成byteshort,同時byteshort也不能自動轉成char

強制型別轉換

​ 強制向下型別轉換(大範圍型別轉為小範圍型別),通常有精度損失,慎用。

​ **doublefloatlongintshort(char) →byte**

​ 語法:

​ [大範圍型別] 變數1 = 變數1的值

​ [小範圍型別1] 變數2 = (小範圍型別1) 變數1

eg:

package datatype;

public

class

strongtypeconversion

}

輸出結果:

23.631453

3534

34

注意:int型別轉換為byte型別時,只會保留int型別低8位(i變數值的二進位制數的後8位),即1個位元組。

eg:

int i=

489;

byte by=

(byte

) i;

system.out.

println

(by)

;

輸出結果:

-23

原因:489(int)轉換為byte型別時,只會保留489(‭1 1110 1001‬ )低8位,所以by的二進位制數為1110 1001‬(最高位是符號位,1代表負數,在計算機中負數儲存的是補碼),‬ 則該負數的原碼是1001 0111(最高位1代表負號),即-001 0111=-23。補碼 → 原碼計算方法如下:

補碼: 1110 1001‬ (最高位1代表負號)

其餘7位:110 1001

取反: 001 0110

取反後+1:001 0111

轉十進位制: 23

添負號: -23

即原碼為:-23

資料溢位問題

​ 當乙個資料溢位時,它會達到反向的最大值。

eg:

package datatype;

public

class

overflow

}

輸出結果

by1= 127

by2= -128

sh1= 32767

sh2= -32768

i1 = 2147483647

i2 = -2147483648

ch1= 65535

ch2= 0

js的兩種資料型別

js中的資料型別總體來說分為兩種,他們分別是 1 值型別 基本型別 數值型 number 字元型別 string 布林值型 boolean null 和 underfined 2 引用型別 類 函式,物件,陣列等 值型別理解 變數之間的互相賦值,是指開闢一塊新的記憶體空間,將變數值賦給新變數儲存到新...

Qt 各種資料型別轉換

1 qstring string qstring.tostdstring 2 string qstring qstring fromstdstring string 3 qstring int,double,char qstring toint qstring todouble qstring.to...

C 各種資料型別轉換

在在做一些互操作的時候往往需要一些型別的相互轉換,比如用c 訪問win32api的時候往往需要向api中傳入dword引數 即 uint引數這些數值所表示的資料在實際的應用中可能需要以字元的形式顯示,但是c 對api的關係無法跟c 相比,所以在c 中進行一些型別資料的轉換十分必要了,下面將用到的一些...