import java.io.IOException;
public class Test2
{
public static void main(String[] args) throws IOException
{
// java 中 10 8 16進制常數的寫法
System.out.println(512);
System.out.println(01000);
System.out.println(0x200);
System.out.println("=========================================>");
// 對於負數有符號位移和無符號位移有差別
// 有符號位移會自動高位補1,無符號將補0,
// 也就是說-1有符號右移1位爲-1,無符號右移1位爲integer最大值
System.out.println((-1 >> 1) == (-1 >>> 1));
System.out.println("=========================================>");
// 打印src的 2 4 8 16 32進制
int src = -5;
System.out.println(toUnsignedString(src, 1));
System.out.println(toUnsignedString(src, 2));
System.out.println(toUnsignedString(src, 3));
System.out.println(toUnsignedString(src, 4));
System.out.println(toUnsignedString(src, 5));
System.out.println("=========================================>");
//正負數轉換的方法
src = -100;
System.out.println(-src);
System.out.println(conversion(src));
System.out.println("=========================================>");
//char 可以參加運算實際上是由於他存儲的是整數
//而由於char是無符號的,所以需要17位來表示,
//所以纔會看起來像int
System.out.println('㮆');
System.out.println(((char)-50298));
System.out.println("=========================================>");
//減減的實現方式
//由於計算機不存在減法,減法也是用加法算的
//所以一個整數加上這個整數類型的無符號最大值
//就相當於是自減,有符號的看起來像是加了一個
//-1,但計算機並沒有負數的概念
int x = 355;
System.out.println(--x);
System.out.println((((x + 255) & 0xff) + (0xffffff00 & x)));
System.out.println(x + 0xffffffff);
System.out.println("=========================================>");
}
public final static char[] digits =
{
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c',
'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
};
/**
* 無符號進制轉換
*
* <p>
* 每次取出傳入 i 的最後 shift 位,並將該值轉化爲10進制的值進行查表<br>
* 最後以倒敘的型式組成字符串
*
* @param i 需要轉換的整數
* @param shift 表示偏移量,1爲2進制,2爲4進制,3爲8進制,4爲16進制, 5爲32進制
* @return 表示該進制型式的字符串
*/
public static String toUnsignedString(int i, final/*此處final僅在編譯期有效*/ int shift)
{
// 該字符數組用來保存每一位的字符表現型式
char[] buf = new char[32];
// 字符指針,表示轉換後的第幾位
int charPos = 32;
// 基數,表示該進制逢多少進1
int radix = 1 << shift;
// 掩碼,表示該進制中的最大數的2進制型式
int mask = radix - 1;
// 以倒序的型式換算
//每次取shift表示的進制的位數
//並將該值轉化爲相應的進制型式字符
do
{
//假設該次爲轉換成2進制,那麼每位最大值爲1
//即mask爲1,以i & mask 的結果就爲 0 和 1
//所以在buf中,根據表digits只能有0和1的字符
buf[--charPos] = digits[i & mask];
i >>>= shift;
}
while (i != 0);
return new String(buf, charPos, (32 - charPos));
}
/**
* 正負數轉換
* @param i 需要轉換的數
* @return i 的相對數
*/
public static int conversion(int i)
{
return ~i + 1;
}
}
複習筆記1 進制以及進制轉換
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.