java無符號整數
❶ java實現:整數進制相互轉換
java實現:整數進制相互轉換的方法:
十進制轉為二進制、八進制、十六進制, 用 Integer.toXXXString()方法
(1)十進制轉為二進制: Integer.toBinaryString(int i);
public static String toBinaryString(inti):以二進制(基數 2)無符號整數形式返回一個整數參數的字元串表示形式。
(2)十進制轉為8進制 :Integer.toOctalString(int i);
public static String toOctalString(inti):以八進制(基數 8)無符號整數形式返回一個整數參數的字元串表示形式。(3)十進制轉為16進制: Integer.toHexString(int i);
public static String toHexString(inti):以十六進制(基數 16)無符號整數形式返回一個整數參數的字元串表示形式。
舉例:
Stringbin=Integer.toBinaryString(10);
Stringoct=Integer.toOctalString(10);
Stringhex=Integer.toHexString(10);
2.十六進制、八進制、二進制轉為十進制(有兩種方法):parseInt() 和valueOf()。
Integer.parseInt(String s,int radix);
public static int parseInt(String s,int radix) throws NumberFormatException{}使用第二個參數作為指定的基數,將字元串參數解析為有符號的整數;
Integer.valueOf(String s,int radix);
public static Integer valueOf(Strings, intradix) throws NumberFormatException{}返回一個 Integer 對象,該對象中保存了用第二個參數提供的基數進行解析時從指定的 String 中提取的值。
舉例:
try{
inti=Integer.parseInt("a",16);
//輸出為10進制數10
System.out.println(i);
}catch(Exceptione){
e.printStackTrace();
}
try{
//十六進制轉成十進制
Stringhex=Integer.valueOf("FFFF",16).toString();
System.out.println(hex);
//八進制轉成十進制
Stringoct=Integer.valueOf("12",8).toString();
System.out.println(oct);
//二進制轉十進制
Stringbin=Integer.valueOf("0101",2).toString();
System.out.println(bin);
}catch(Exceptione){
e.printStackTrace();
}
❷ Java不提供無符號整數類型謝謝
是的不提供;
--------------------------------------
Java 中的無符號類型是怎麼回事兒?
在 C 和 C++ 這樣的語言中,都提供了不同長度的整數類型:char, short, int, long (實際上,char 並不是真正的整數,但是你可以把它當成整數來用。在實際應用場景中,很多人在 C 語言中用 char 來存儲較小的整數)。在大部分的 32 位操作系統上,這些類型分別對應 1 位元組,2 位元組,4 位元組和 8 位元組。但是需要注意的是,這些整數類型所對應的位元組長度在不同的平台上是不一樣的。相對而言,由於 Java 是針對跨平台來設計的,所以無論運行在什麼平台上,Java 中的 byte 永遠是 1 位元組,short 是 2 位元組,int 是 4 位元組,long 是 8 位元組。
C 語言中的整數類型都提供了對應的「無符號」版本,但是 Java 中就沒有這個特性了。我覺得 Java 不支持無符號類型這個事兒實在是太不爽了,你想想,大量的硬體介面、網路協議以及文件格式都會用到無符號類型!(Java 中提供的 char 類型和 C 中的 char 有所不同,在 Java 中,chat 是用 2 個位元組來表示 Unicode 值,在 C 中,char 是用 1 個位元組來表示 ASCII 值。雖然可以在 Java 中把char 當做無符號短整型來使用,用來表示 0 到 2^16 的整數。但是這樣來用可能產生各種詭異的事情,比如當你要列印這個數值的時候實際上列印出來的是這個數值對應的字元而不是這個數值本身的字元串表示)。
那麼,如何應對 Java 中無符號類型的缺失?
好吧,對於我給出的這種方案,你可能會不喜歡……
答案就是:使用比要用的無符號類型更大的有符號類型。
例如:使用 short 來處理無符號的位元組,使用 long 來處理無符號整數等(甚至可以使用 char 來處理無符號短整型)。確實,這樣看起來很浪費,因為你使用了 2 倍的存儲空間,但是也沒有更好的辦法了。另外,需要提醒的是,對於 long 類型變數的訪問不是原子性操作,所以,如果在多線程場景中,你得自己去處理同步的問題。
地址:http://www.cnblogs.com/yuanyq/p/java_unsigned_types.html
原文地址:http://www.darksleep.com/player/JavaAndUnsignedTypes.html
原文作者:Sean R. Owens
❸ java中char與short有什麼區別
在Java中,char是16bit長的無符號整數,因此范圍是:0~65535,而short則是16bit長的帶符號整數,范圍是-32768~32767。 所以,兩者雖然字長相同,但意義卻不一樣(表示範圍並不完全重合或包含),因此不管是char轉換成short,還是short轉換成char,都屬於數值的「窄化轉換」(Narrowing Primitive Conversion)。 窄化轉化都可能「丟失精度」,因此必須強制轉換。雖然,這里的「丟失精度」跟從int到short的丟失精度給人的感覺似乎不一樣,但仔細想想也沒有什麼區別,一方面,char有16個bit表示數值,而short用於表示數值大小的只有15個bit,因此,從char到short會「丟失數值精度」,而另一方面,short有1個bit表示數值的符號,而char卻根本沒有這么個符號位(所有的bit都用來表示數值大小了),所以從short到char也可能「丟失精度」,只是這里丟失的是有關正負的「精確程度」。