1. 程式人生 > >動手動腦(一)

動手動腦(一)

href highlight 補碼 符號 外部 www. 定義 string 需要

一,

代碼:

public class EnumTest {
private enum MyEnum{
ONE, TWO, THREE
}
public static void main(String[] args) {
for(MyEnum value:MyEnum.values()){
System.out.println(value);
}
} } 運行結果: ONE
TWO
THREE 總結如下: 1.java中的enum關鍵字背後實際是Enum這個類實現的。 2.values()方法遍歷枚舉類中的每個元素。
3.在我們編寫自定義的enum時,其中是不含values方法的,在編譯java文件時,java編譯器會自動幫助我們生成這個方法。 二, 原碼:所謂原碼就是二進制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其余位表示數值的大小。 反碼:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。 補碼:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。 示例: +100表示為2進制數為+1100100
原碼=01100100 反碼=01100100 補碼=01100100 正數的話3碼都一樣
-100表示為2進制樹為-1100100
原碼=11100100 反碼=10011011(第一位表示符號的數字不變)
補碼=反碼+1=10011100

示例:

package 練習一; public class Shu { public static void main(String[] args) {
System.out.println(2&3); } } 運行結果: 2 采用補碼的形式 三, package 練習一; public class Shu {
private static int value=1; public static void main(String[] args) {
int value=2;
System.out.println(value); } } 運行結果: 2 分析:Shu類中的value變量為私有變量,外部函數沒有訪問權限。 四, 從int或long轉換為float或double會有精度的損失 java 的浮點類型都依據 IEEE 754 標準。 分為三個部分:
(1) 一個單獨的符號位s 直接編碼符號s 。
(2)k 位的冪指數E ,移碼表示 。
(3)n 位的小數,原碼表示 。
當下面情況出現是則無法精確表示:
1.冪數不夠表示了:這種情況往往出現在數字太大了,超過冪數所能承受的範圍,那麽這個數字就無法表示了。如冪數最大只能是10,但是這個數字用科學計數法表示時,冪數一定會超過10,就沒辦法了。
2.尾數不夠表示了:這種情況往往出現在數字精度太長了,如1.3434343233332這樣的數字,雖然很小,還不超過2,這種情況下冪數完全滿足要求,但是尾數已經不能表示出來了這麽長的精度。 五, package 練習一; public class Shu {
public static void main(String[] args) {
System.out.println("0.05+0.01="+(0.05+0.01));
System.out.println("1.0-0.42="+(1.0-0.42));
System.out.println("4.015*100="+(4.015*100));
System.out.println("123.3/100="+(123.3/100)); } } 運行結果: 0.05+0.01=0.060000000000000005
1.0-0.42=0.5800000000000001
4.015*100=401.49999999999994
123.3/100=1.2329999999999999 結論:

使用double類型的數據進行運算,結果是不精確的

這個涉及到二進制與十進制的轉換問題。
N進制可以理解為:數值×基數的冪,例如我們熟悉的十進制數123.4=1×102+2×10+3×(10的0次冪)+4×(10的-1次冪);其它進制的也是同理,例如二進制數11.01=1×2+1×(2的0次冪)+0+1×(2的-2次冪)=十進制的3.25。
double類型的數值占用64bit,即64個二進制數,除去最高位表示正負符號的位,在最低位上一定會與實際數據存在誤差(除非實際數據恰好是2的n次方)。
舉個例子來說,比如要用4bit來表示小數3.26,從高到低位依次對應2的1,0,-1,-2次冪,根據最上面的分析,應當在二進制數11.01(對應十進制的3.25)和11.10(對應十進制的3.5)之間選擇。
簡單來說就是我們給出的數值,在大多數情況下需要比64bit更多的位數才能準確表示出來(甚至是需要無窮多位),而double類型的數值只有64bit,後面舍去的位數一定會帶來誤差,無法得到“數學上精確”的結果。

六,

package 練習一; public class Shu {
public static void main(String[] args) {
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
} } 運行結果: X+Y=100200
300=X+Y 分析:第一個依次輸出了X和Y的值,若第一個想要求和應該改為:System.out.println("X+Y="+(X+Y)); 第二個則為計算了兩個變量的值

動手動腦(一)