Re: [問題] 位元運算問題,將byte填進int內

看板java作者 (小安)時間16年前 (2010/01/05 19:22), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《leatica (噗妞兔姆妞)》之銘言: : Q1: : 那現在就是我有一個byte型態的資料計載紅色的值,假設紅色值是255(0xFF) : 在Debug Window看到的是 -128 : 然後我希望填到整數0xFF000000的右邊數來第5, 6個位置 : 使得結果變成 0xFFFF0000 : 我是這樣寫的 : byte tmp_A = -128; : int tmp_B = 0xFF000000; : tmp_B |= (tmp_A << 16); : 結果輸出tmp_B似乎不是我要的0xFFFF0000 (/‵Д′)/~ ╧╧ : 請問這之中有什麼誤會嗎? 這個 statement 完就會錯了: tmp_A << 16 因為 Java 是以 int 做為最小的運算單位, tmp_A 目前的型態是 byte,會先轉成 int 之後再做 shift left 的動作。 但是轉成 int 會變成 int 型態的 -128, 也就是 0xFFFFFF80,和你所期望的 0x00000080 不同。 正確的作法應該是 (tmp_A&0xFF) << 16, 原理我想應該不用我多說, 反正你都有 Debugger 可以看了 XD 另外 java 的 byte 是 signed byte, 他的範圍是 -128 ~ 127, 不過在影像處理中,也常常會以 byte 來處理 0~255 的 data, 這時候就要特別注意 casting 的細節。 : Q2: : byte tmp_c = 0xFF; : 好像不能直接這樣寫對吧? 前面說過 int 是 java 最小的運算單位, 所以 0xFF 這個 literal 的 type 是 int, 自然無法 assign 給 byte variable。 但奇怪的是前面的 byte tmp_A = -128 卻沒有問題? 這是因為介於 -128 ~ 127 之間的數字 JVM 有做特別的處理。 (是 Constant Pool 嗎? 我忘記了,請大家補充 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.160.117

01/05 19:51, , 1F
多謝啦!!我再試試
01/05 19:51, 1F
文章代碼(AID): #1BGo3rdq (java)
文章代碼(AID): #1BGo3rdq (java)