Re: [問題] Java真的沒有unsigned primitive type嗎

看板java作者 (學無止境,啥時才摔到底?)時間18年前 (2007/07/19 00:02), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串8/11 (看更多)
※ 引述《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)
文章代碼(AID): #16dZc1kF (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 8 之 11 篇):
文章代碼(AID): #16dZc1kF (java)