作者hougzou (学无止境,啥时才摔到底?)
看板java
标题Re: [问题] Java真的没有unsigned primitive type吗
时间Thu Jul 19 00:00:44 2007
※ 引述《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)