Re: [問題] Java真的沒有unsigned primitive type嗎
※ 引述《Jimmy0398 ()》之銘言:
: 其中每個像素是8 Bits,值是0~255。 所以當我把每個值放入一個 Byte Array
: 時,超過127的會以負值表示。這對我後來的程序有麻煩。
: 目前已知最快的方法是用 short 等... 但是想要找一個較省容量的方法。
: 希望大家給點建議^^"
前陣子同事也有類似的困惑,讓他在程式撰寫上懷疑自己是否送錯資料給 Device,
我建議他換個思考方式,也同樣建議您,應該將顯示與儲存分開來看...
只要是整數型別,你將數值印出來一定會因為sign bit而產生正負的差異,
但這一切都是你的幻覺,因為存在byte中的,一定是8個bit不會改變。
你之所以看到會有負值,都是因為轉型的緣故。
譬如下面這段程式:
int a = 255;
byte b = (byte) a;
int c = (int) b;
System.out.println(a);
System.out.println(b);
System.out.println(c);
印出來的結果將會是
255 (直接將int轉為String, 沒問題)
-1 (將byte轉int之後再轉為String)
-1 (將事先轉好的int轉為String)
換言之,你在印出來的過程中,其實是編譯器背後替你轉型,
將1111 11111 轉換為整數 1111 1111 1111 1111 1111 1111 1111 1111
OK! 回歸正題,那你該怎麼做才能看得出來你要的unsign?
簡單來說,就是利用Hex的表示法。
我們來看看Integer物件的某個method...
public static String toHexString(int i)
這個method的說明清楚指出...
Returns a string representation of the integer argument as an unsigned
integer in base 16.
所以,若你對於看到負號不滿意,請用Hex吧!
byte b = (byte) 255 與 byte b = (byte) 0xFF 是一樣的東西,習慣就好了。
能確定自己轉換得沒錯最重要!
--
話說... 最近常會會回文回到不知道自己要表達什麼... ><
也真難為我同事們能聽得懂我的解釋... = =a
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.122.24
※ 編輯: hougzou 來自: 211.74.122.24 (07/19 00:19)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 8 之 11 篇):