Re: [問題] 位元運算問題,將byte填進int內
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):