9.28作業2

吉尼泰梅發表於2024-09-28

列舉的型別及使用
列舉不屬於原始資料型別,它的每個具體值都引用一個特定的物件。相同的值則引用同一個物件。
可以使用“”和equals()方法直接比對列舉變數的值,換句話說,對於列舉型別的變數,“”和equals()方法執行的結果是等價的。

以及列舉可用於Switch語句中
列舉型別是引用型別
在型別轉換中從整型到浮點型存在精度損失
在電腦科學中,原碼、反碼和補碼是表示有符號整數(即可以表示正數、負數和零)的三種不同方式。這些表示方法主要用於二進位制系統中,特別是在計算機內部處理整數時。下面,我將逐一解釋這些概念,並透過Java程式來驗證Java中整數是如何表示的。

原碼(Sign-Magnitude Representation)

原碼是一種直接表示數值的方法,其中最高位用來表示符號(0為正,1為負),其餘位表示數值本身。正數的原碼:最高位為0,其餘位表示該數的絕對值。負數的原碼:最高位為1,其餘位表示該數的絕對值。

反碼(One’s Complement)

反碼是一種用於簡化二進位制加減運算的表示方法。對於正數,反碼與原碼相同;對於負數,反碼是原碼除符號位外,其餘各位取反(0變1,1變0)。

補碼(Two’s Complement)

補碼是目前計算機系統中最常用來表示有符號整數的方法。正數的補碼與原碼相同;負數的補碼是其反碼加1。補碼的優點在於它簡化了加減運算,並且只有一個零的表示(即0000...00),從而簡化了計算機的算術邏輯單元(ALU)的設計。

Java中的整數表示

在Java中,整數型別(如byte、short、int、long)在記憶體中的儲存採用的是補碼錶示法。這是因為補碼錶示法具有許多優點,如前面所述。

示例程式

為了驗證Java中整數是採用補碼錶示的,我們可以編寫一個簡單的Java程式,透過位操作來觀察正數和負數的表示。

java
public class IntegerRepresentation {
public static void main(String[] args) {
int positiveNumber = 5;
int negativeNumber = -5;

    // 列印正數的二進位制表示(使用Integer.toBinaryString方法)
    System.out.println("Positive number: " + positiveNumber + ", Binary: " + Integer.toBinaryString(positiveNumber));

    // 列印負數的二進位制表示(注意:直接列印的是補碼錶示)
    System.out.println("Negative number: " + negativeNumber + ", Binary (complement): " + Integer.toBinaryString(negativeNumber));

    // 驗證負數的補碼錶示
    // 負數的原碼(假設為8位,僅用於說明): 1000 0101
    // 負數的反碼: 1111 1010
    // 負數的補碼: 1111 1011
    // 注意:Java中的Integer是32位的,但這裡為了簡化,我們使用8位來說明

    // 透過位操作來驗證補碼
    int negativeNumberInBits = -5; // 在Java中,-5已經是以補碼形式儲存的
    int complement = ~negativeNumberInBits + 1; // 反碼加1應得到其正數

    // 輸出驗證結果
    System.out.println("Complement + 1 of negative number: " + complement); // 應該輸出5
}

}

在上面的程式中,我們首先列印了正數和負數的二進位制表示(實際上,對於負數,直接列印的是其補碼錶示)。然後,我們透過對負數的補碼進行取反加1操作來驗證補碼錶示的正確性。根據補碼的定義,取反加1應得到其正數表示。

透過執行這個程式,我們可以觀察到Java中整數確實是採用補碼來表示的。

相關文章