java基礎篇(一)java數據類型、轉換、進制轉換

一、java數據類型劃分

1、數值型:

1.1. 整形

	byte     1字節   8位   -128~127
	1字節等於8bit,8位,每一位有兩種可能,2的8次方256,表示正負,故取值範圍-2的七次方至2的7次方

    short    2字節   16位  -32768~32767
	2字節等於16bit,16位,每一位有兩種可能,2的16次方,表示正負,故取值範圍-2的15次方至2的15次方,int,long以此類推
	
    int      4字節   32位  -2^31~2^31-1

    long     8字節   64位  2^63~2^63-1,必須以大寫L或者小寫l結尾

1.2.浮點類型:

    float    4字節   32位  -3.403E38 ~ 3.403E38
    單精度,尾數可以精確到7位有效數字。很多情況下,精度很難滿足需求。變量值末尾要以F或者f結尾
    同樣4個字節,float比long值還大,是因爲它是用佔得的字節表示10的幾次冪
    double   8字節   64位  -1.798E308 ~ 1.798E308
    雙精度,精度是float的兩倍。通常採用此類型。範圍更大,精度更高

2、 字符型:

char     2字節   16位   0~65535
Java中的所有字符都使用Unicode編碼,故一個字符可以存儲一個字母,一個漢字,或其他書面語的一個字符。

字符型變量的三種表現形式:
1. 字符常量是用單引號(‘ ’)括起來的單個字符。例如:char c1 = 'a'; char c2 
= '中'; char c3 = '9';
2. Java中還允許使用轉義字符‘\’來將其後的字符轉變爲特殊字符型常量。
例如:char c3 = ‘\n’; // '\n'表示換行符
3. 直接使用 Unicode 值來表示字符型常量:‘\uXXXX’。其中,XXXX代表
一個十六進制整數。如:\u000a 表示 \n。

3、布爾型:

 boolean  true    false

4、引用類型:

字符串 String、 類 class 、枚舉 enum、接口interface、數組array

二、基本數據類型之間的轉換

1、自動類型轉換:範圍小→範圍大

byte→short→int→long→float→double;

char→int→long→float→double          

2、強制類型轉換:範圍大→範圍小

需要加強制轉換符

3、練習

/*
基本數據類型之間的運算規則:

前提:這裏討論只是7種基本數據類型變量間的運算。不包含boolean類型的。

1. 自動類型提升:
    結論:當容量小的數據類型的變量與容量大的數據類型的變量做運算時,結果自動提升爲容量大的數據類型。
	byte 、char 、short --> int --> long --> float --> double 

	特別的:當byte、char、short三種類型的變量做運算時,結果爲int型
	
2. 強制類型轉換:見VariableTest3.java


說明:此時的容量大小指的是,表示數的範圍的大和小。比如:float容量要大於long的容量
*/
class VariableTest2 {
	public static void main(String[] args) {
		
		byte b1 = 2;
		int i1 = 129;
		//編譯不通過
		//byte b2 = b1 + i1;
		int i2 = b1 + i1;
		long l1 = b1 + i1;
		System.out.println(i2);

		float f = b1 + i1;
		System.out.println(f);

		short s1 = 123;
		double d1 = s1;
		System.out.println(d1);//123.0

		//***************特別地*********************
		char c1 = 'a';//97
		int i3 = 10;
		int i4 = c1 + i3;
		System.out.println(i4);

		short s2 = 10;
		//char c2  = c1 + s2;//編譯不通過

		byte b2 = 10;
		//char c3 = c1 + b2;//編譯不通過

		//short s3 = b2 + s2;//編譯不通過

		//short s4 = b1 + b2;//編譯不通過
		//****************************************

	}
}
/*
強制類型轉換:自動類型提升運算的逆運算。
1.需要使用強轉符:()
2.注意點:強制類型轉換,可能導致精度損失。



*/
class VariableTest3 {
	public static void main(String[] args) {
		
		double d1 = 12.9;
		//精度損失舉例1
		int i1 = (int)d1;//截斷操作
		System.out.println(i1);//12
		
		//沒有精度損失
		long l1 = 123;
		short s2 = (short)l1;
		
		//精度損失舉例2
		int i2 = 128;
		byte b = (byte)i2;
		System.out.println(b);//-128

	}
}

class VariableTest4 {
	public static void main(String[] args) {
		
		//1.編碼情況1:
		long l = 123213;
		System.out.println(l);//int自動提升爲long型,所以不用加L或者l
		//編譯失敗:過大的整數
		//long l1 = 21332423235234123;
		long l1 = 21332423235234123L;


		//****************
		//編譯失敗
		//float f1 = 12.3;//默認12.3是double,double轉float報錯
		float f1 = (float)12.3;
		//2.編碼情況2:
		//整型常量,默認類型爲int型
		//浮點型常量,默認類型爲double型
		byte b = 12;
		//byte b1 = b + 1;//編譯失敗
		int b1 = b + 1;
		//float f1 = b + 12.3;//編譯失敗
		double f1 = b + 12.3;
	}
}

/*
String類型變量的使用
1. String屬於引用數據類型,翻譯爲:字符串
2. 聲明String類型變量時,使用一對""
3. String可以和8種基本數據類型變量做運算,且運算只能是連接運算:+
4. 運算的結果仍然是String類型

*/
class StringTest {
	public static void main(String[] args) {
		
		String s1 = "Hello World!";

		System.out.println(s1);

		String s2 = "a";
		String s3 = "";

		//char c = '';//編譯不通過

		//***********************
		int number = 1001;
		String numberStr = "學號:";
		String info = numberStr + number;// +:連接運算
		boolean b1 = true;
		String info1 = info + b1;// +:連接運算
		System.out.println(info1);

		//***********************
		//練習1
		char c = 'a';//97   A:65
		int num = 10;
		String str = "hello";
		System.out.println(c + num + str);//107hello
		System.out.println(c + str + num);//ahello10
		System.out.println(c + (num + str));//a10hello
		System.out.println((c + num) + str);//107hello
		System.out.println(str + num + c);//hello10a

		//練習2
		//*	*
		System.out.println("*	*"); //輸出*	*
		System.out.println('*' + '\t' + '*');//輸出93, char類型加法運算
		System.out.println('*' + "\t" + '*');//輸出*	*,"\t"string類型表示連接
		System.out.println('*' + '\t' + "*");//輸出51*,第一個加好表示加法第二個連接
		System.out.println('*' + ('\t' + "*"));//輸出*	*

		//練習3
		String str1 = 4; //判斷對錯:no
		String str2 = 3.5f + “”; //判斷str2對錯:yes
		System.out.println(str2); //輸出:”3.5”
		System.out .println(3+4+“Hello!); //輸出:7Hello!
		System.out.println(“Hello!+3+4); //輸出:Hello!34
		System.out.println(‘a’+1+“Hello!); //輸出:98Hello!
		System.out.println(“Hello”+‘a’+1); //輸出:Helloa1
		
		//練習4
		1short s = 5;
		s = s-2; //判斷:no,int
		2byte b = 3;
		b = b + 4; //判斷:no int
		b = (byte)(b+4); //判斷:yes
		3char c = ‘a’;
		int i = 5;
		float d = .314F;
		double result = c+i+d; //判斷:yes
		4byte b = 5;
		short s = 3;
		short t = s + b; //判斷:no ,int
		
		//***********************

		//String str1 = 123;//編譯不通過
		String str1 = 123 + "";
		System.out.println(str1);//"123"
		
		//int num1 = str1;
		//int num1 = (int)str1;////編譯不通過

		int num1 = Integer.parseInt(str1);
		System.out.println(num1);//123
	}
}

三、進制轉換

對於整數,有四種表示方式:

  1. 二進制(binary):0,1 ,滿2進1.以0b或0B開頭。
  2. 十進制(decimal):0-9 ,滿10進1。
  3. 八進制(octal):0-7 ,滿8進1. 以數字0開頭表示。
  4. 十六進制(hex):0-9及A-F,滿16進1. 以0x或0X開頭表示。此處的A-F不區分大小寫。
    如:0x21AF +1= 0X21B0

1、二進制轉10進制

  • Java整數常量默認是int類型,當用二進制定義整數時,其第32位是符號位;
  • 當是long類型時,二進制默認佔64位,第64位是符號位
  • 二進制的整數有如下三種形式:
  1. 原碼:直接將一個數值換成二進制數。最高位是符號位
  2. 負數的反碼:是對原碼按位取反,只是最高位(符號位)確定爲1。
  3. 負數的補碼:其反碼加1。
  4. 計算機以二進制補碼的形式保存所有的整數。
  5. 正數的原碼、反碼、補碼都相同
  6. 負數的補碼是其反碼+1
    在這裏插入圖片描述
  • 最高位爲符號位:0:正數,1:負數
  • 00001110轉換爲10進製爲:1 * 2^3 + 1 * 2^2 + 1* 2^1 = 14
    在這裏插入圖片描述
    10111011未知負數補碼-1變爲10111010,除符號位取反11000101
    計算:2^1+ 2^3+ 2^7= -69
    在這裏插入圖片描述

2、 十進制轉二進制

在這裏插入圖片描述

3、二進制轉八進制和十六進制

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章