Java程式設計基礎:深入理解常量、進位制轉換與補碼
在Java程式設計中,常量、進位制轉換和補碼是理解資料表示和處理的基礎。本文將詳細探討這些概念,包括常量的分類、進位制轉換的方法以及補碼的計算。
常量
常量是在Java程式執行過程中其值不能發生改變的量。它們用於定義固定的值,如配置引數、固定演算法中的常數等。
分類
常量可以分為以下幾類:
字面值常量
- 整數常量:表示所有的整數,包括負數,如
10
,-8
。 - 小數常量:表示所有的小數,如
1.23
,-3.14
。 - 布林常量:
true
和false
。 - 空常量:
null
。 - 字元常量:表示由單引號括起來的單個字元,如
'a'
,'劉'
。
自定義常量
使用者根據需要定義的常量,通常透過定義變數並將其值設為不可變來實現。
常見的單位轉換
- 1byte = 8bit
- 1kb = 1024byte
- 1mb = 1024kb
- 1gb = 1024mb
- 1tb = 1024gb
- 1pb = 1024tb
進位制轉換
Java針對整數常量,提供4種表現形式:
- 二進位制:由0,1構成,逢2進1,由
0b
開頭。 - 八進位制:由0,1,2,3,4,5,6,7構成,逢8進1,由
0
開頭。 - 十進位制:由0,1,2,3,4,5,6,7,8,9構成,逢10進1,預設就是10進位制。
- 十六進位制:由0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f構成,逢16進1,由
0x
開頭。
進位制之間的轉換
- 其它進位制轉10進位制:按權展開求和。
- 10進位制轉其它進位制:除基取餘,直到商為0,餘數翻轉。
- 10進位制與2進位制之間的快速轉換:8421碼。
- 其它進位制到其它進位制:先轉10進位制,再轉目標進位制,或者先轉2進位制,再根據目標進位制的位數分組轉換。
示例程式碼
public class ConversionExample {
public static void main(String[] args) {
// 整數10的二進位制表現形式
int decimal = 10;
String binary = Integer.toBinaryString(decimal);
System.out.println("Decimal 10 in binary: " + binary);
// 52轉二進位制、八進位制、十六進位制
int number = 52;
String binaryNumber = Integer.toBinaryString(number);
String octalNumber = Integer.toOctalString(number);
String hexNumber = Integer.toHexString(number);
System.out.println("Decimal 52 in binary: " + binaryNumber);
System.out.println("Decimal 52 in octal: " + octalNumber);
System.out.println("Decimal 52 in hex: " + hexNumber);
}
}
補碼
在Java中,負數的表示採用補碼形式。補碼的計算過程包括原碼、反碼和補碼的轉換。
- 原碼:正數的原碼與二進位制值保持一致,最高位為0;負數的原碼數值位與正數一致,最高位是1。
- 反碼:正數的反碼與原碼保持一致;負數的反碼,再原碼的基礎上,符號位不變,數值位按位取反。
- 補碼:正數的補碼與原碼保持一致;負數的補碼,再反碼的基礎之上,末位+1。
示例
public class TwosComplementExample {
public static void main(String[] args) {
int negativeNumber = -7;
int positiveNumber = 3;
// 計算-7 + 3的結果
int result = negativeNumber + positiveNumber;
System.out.println("Result of -7 + 3: " + result);
// 列印補碼
System.out.println("Binary representation of -7: " + Integer.toBinaryString(negativeNumber));
System.out.println("Binary representation of 3: " + Integer.toBinaryString(positiveNumber));
}
}
Java程式設計基礎:深入理解變數
在Java程式設計中,變數是程式中最基本的元素之一,用於儲存資料值。變數的值在程式執行過程中可以被讀取和修改。本文將詳細探討Java中變數的定義、注意事項、資料型別轉換以及使用示例。
變數概述
變數是指在Java程式執行過程中,其值可以發生改變的量。變數允許程式設計師在程式執行期間動態地儲存和運算元據。
定義變數
定義一個變數的基本語句格式為:
資料型別 變數名 = 初始化值;
例如,定義一個整型變數age
並賦值為25
:
int age = 25;
使用變數的注意事項
- 初始化賦值:變數在使用前必須進行初始化賦值,以確保變數有一個確定的值。
- 命名規則:
- 變數名必須以字母、下劃線
_
或美元符號$
開頭。 - 變數名不能以數字開頭。
- 變數名不能是Java中的關鍵字。
- 在同一作用域下,變數名不能重複,但大小寫不同視為不同變數。Java嚴格區分大小寫。
- 變數名必須以字母、下劃線
- 資料型別預設:
- Java中整數預設是
int
型別,要想定義一個long
型別的變數,需要在值的末尾加上L
或l
,推薦使用L
。 - Java中小數預設是
double
型別,要想定義一個float
型別的變數,需要在值的末尾加上F
或f
,推薦使用F
。
- Java中整數預設是
資料型別轉換
在Java中,變數參與運算時,會先自動提升資料型別,轉換順序為:
byte, short, char -> int -> long -> float -> double
這意味著在進行混合資料型別的運算時,較小範圍的資料型別會自動轉換為較大範圍的資料型別,以避免資料丟失。
強制資料型別轉換
強制資料型別轉換是指將一種資料型別顯式轉換為另一種不相容的資料型別。轉換格式為:
目標資料型別 變數名 = (目標資料型別)(要轉換的值或表示式);
例如,將double
型別的值強制轉換為int
型別:
double d = 10.5;
int i = (int)d; // 結果為10
注意:強制型別轉換可能會導致精度損失,應謹慎使用。
示例程式碼
public class VariableExample {
public static void main(String[] args) {
// 定義不同型別的變數
byte b = 100;
short s = 200;
int i = 300;
long l = 400L;
float f = 50.5F;
double d = 60.5;
char c = 'A';
boolean bool = true;
// 自動型別轉換示例
int sum = b + s + i; // byte和short自動轉換為int
// 強制型別轉換示例
int intResult = (int)d; // double轉換為int
// 輸出結果
System.out.println("Byte: " + b);
System.out.println("Short: " + s);
System.out.println("Int: " + i);
System.out.println("Long: " + l);
System.out.println("Float: " + f);
System.out.println("Double: " + d);
System.out.println("Char: " + c);
System.out.println("Boolean: " + bool);
System.out.println("Sum: " + sum);
System.out.println("Integer result of double: " + intResult);
}
}