軟件工程第二次課課堂總結

一、枚舉類型用法總結java

代碼以下:測試

 1 public class EnumTest {
 2 
 3     public static void main(String[] args) {
 4         Size s=Size.SMALL;
 5         Size t=Size.LARGE;
 6         //s和t引用同一個對象?
 7         System.out.println(s==t);  //
 8         //是原始數據類型嗎?
 9         System.out.println(s.getClass().isPrimitive());
10         //從字符串中轉換
11         Size u=Size.valueOf("SMALL");
12         System.out.println(s==u);  //true
13         //列出它的全部值
14         for(Size value:Size.values()){
15             System.out.println(value);
16         }
17     }
18 
19 }
20  enum Size{SMALL,MEDIUM,LARGE};

運行結果以下:spa

 

 

 首先,對於枚舉類型,枚舉的各元素爲不一樣對象,位於內存中的不一樣位置,且枚舉類型不屬於原始數據類型,字符串能夠轉換成枚舉類型。當遍歷枚舉類型中的全部值時,打印的是枚舉類型中列舉的各項。3d

對於枚舉類型的變量,使用「==」和「equals()」方法是等價的。code

二、原碼、補碼、反碼的概念及應用對象

首先,原碼、補碼和反碼實在二進制的基礎上實現的,下面也將基於二進制數字描述這三個概念及其應用blog

原碼:如,十進制數字7的原碼爲00000111,十進制數字-7的原碼爲10000111;第一位數字表明符號,若是是0則爲正,若是是1則爲負內存

反碼:如,十進制數字7的反碼爲00000111,十進制數字-7的反碼爲11111000;正數的反碼是其自己,負數的反碼是其符號位不變,其他各位取反ci

補碼:如,十進制數字7的補碼爲00000111,十進制數字-7的補碼爲11111001;正數的補碼是其自己,負數的補碼是其反碼+1字符串

計算機中存儲的都是數的補碼,正數的原碼、反碼、補碼都是相同的;而負數的原碼、反碼、補碼是不同的,補碼=原碼取反+1(符號位不變)。因此,負數是按照它的補碼輸出的。

關於二進制數運算測試:

代碼以下:

 1 public class doubletest {
 2     public static void main(String[] args) {
 3         int num1=7;
 4         int num2=-7;
 5         int num3=5;
 6         int num4=-5;
 7         String b1 = Integer.toBinaryString(num1);
 8         String b2 = Integer.toBinaryString(num2);
 9         String b3 = Integer.toBinaryString(num3);
10         String b4 = Integer.toBinaryString(num4);
11         System.out.println("十進制:"+num1+" 二進制:"+b1);
12         System.out.println("十進制:"+num2+" 二進制:"+b2);
13         System.out.println("進行運算:");
14         System.out.println("一、左移2位\n\t7:十進制:"+(num1<<2)+" 二進制:"+Integer.toBinaryString(num1<<2)+"\n\t-7:十進制:"+
15                 +(num2<<2)+" 二進制:"+Integer.toBinaryString(num2<<2));
16         System.out.println("二、右移2位\n\t7:十進制:"+(num1>>2)+" 二進制:"+Integer.toBinaryString(num1>>2)+"\n\t-7:十進制:"+
17                 +(num2>>2)+" 二進制:"+Integer.toBinaryString(num2>>2));
18         System.out.println("三、&運算\n\t7的二進制:"+b1+" 5的二進制:"+b3+"\n\t7&5二進制"+
19                 Integer.toBinaryString(7&5)+" 十進制:"+(7&5));
20         System.out.println("四、|運算\n\t7的二進制:"+b1+" -5的二進制:"+b4+"\n\t7|-5二進制"+
21                 Integer.toBinaryString(7|-5)+" 十進制:"+(7|-5));
22         System.out.println("五、^運算\n\t-7的二進制:"+b2+" 5的二進制:"+b3+"\n\t-7^5二進制"+
23                 Integer.toBinaryString(-7^5)+" 十進制:"+(-7^5));
24         System.out.println("六、~運算\n\t7的二進制:"+b1+" 5的二進制:"+b3+" -7的二進制"+
25                 b2+" -5的二進制"+b4+"\n\t~7的二進制:"+Integer.toBinaryString(~7)+
26                 " ~5的二進制:"+Integer.toBinaryString(~5)+" ~-7的二進制:"+Integer.toBinaryString(~-7)+
27                 " ~-5的二進制:"+Integer.toBinaryString(~-5));
28     }
29 }

測試結果:

 

 

 

 

 可見,<<運算是將二進制數字所有左移n位,後面補0,>>運算是將二進制數字所有右移n位,正數前面補0,負數補1;

&運算是將二進制數字各位相比較,兩數全爲1才得1,不然得0

|運算是將二進制數字各位相比較,兩數有一個是1則爲1,都是0才得0

^運算是將二進制數字各位相比較,兩數相同則爲0,兩數不一樣則爲1

~運算即將二進制各位取反,0變1,1變0

三、double類型運算精確問題

測試代碼:

1 public class doubletest {
2     public static void main(String[] args) {
3         System.out.println("0.05+0.01="+(0.05+0.01));
4         System.out.println("1.0-0.42="+(1.0-0.42));
5         System.out.println("4.015*100="+(4.015*100));
6         System.out.println("123.3/100="+(123.3/100));
7     }
8 }

測試結果:

 

 

 爲何double類型的數值進行運算的時候得不到「數學上精確的結果」?

該問題的本質仍是來源於二進制與十進制之間的轉化,double類型的數值佔用64bit,即64個二進制數,除去最高位表示正負符號的位,在最低位上必定會與實際數據存在偏差(除非實際數據剛好是2的n次方),好比要用4bit來表示小數3.26,從高到低位依次對應2的1,0,-1,-2次冪,根據最上面的分析,應當在二進制數11.01(對應十進制的3.25)和11.10(對應十進制的3.5)之間選擇。簡單來講就是咱們給出的數值,在大多數狀況下須要比64bit更多的位數才能準確表示出來(甚至是須要無窮多位),而double類型的數值只有64bit,後面捨去的位數必定會帶來偏差,沒法獲得「數學上精確」的結果。

而在java中,爲解決double類型數值運算封裝了一個BigDecimal類,該類能夠解決double類型運算不精確的問題。

關於BigDecimal類的構造器及方法介紹可見如下連接:https://www.jianshu.com/p/c81edc59546c

四、字符串鏈接測試:

代碼以下:

1 public class test {
2     public static void main(String[] args) {
3         int X=100;
4         int Y=200;
5         System.out.println("X+Y="+X+Y);
6         System.out.println(X+Y+"=X+Y");
7     }
8 }

測試結果以下:

 

 

 能夠看出當字符串前有+時,會先進行前面的運算,再判斷後面是字符串,即X+Y+"=X+Y"至關於(X+Y)+"=X+Y",而當字符串在前是,會把+後面每一個變量都轉化爲字符串型在進行字符串的鏈接

相關文章
相關標籤/搜索