作者tkcn (小安)
看板java
标题Re: [问题] 位元运算问题,将byte填进int内
时间Tue Jan 5 19:22:26 2010
※ 引述《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
1F:推 leatica:多谢啦!!我再试试 01/05 19:51