不知道各位大侠注意没有,int转化为byte时会有问题.
int in =new Double(255 * Math.random()).intValue();
byte b = (byte)in;
System .out.print(in + " " + b +"\n");打印如下
190 -66
74 74
114 114
229 -27
82 82
53 53
4 4
139 -117
227 -29
55 55
莫不是传说中的的补码问题在这里出现了?比如 int的数为129 : 00000000 00000000 00000000 10000001
变为byte后直接用最后一个字节? 10000001 补码变正是~~~~也就是~~~~ -127??
那怎么办?
int in =new Double(255 * Math.random()).intValue();
byte b = (byte)in;
System .out.print(in + " " + b +"\n");打印如下
190 -66
74 74
114 114
229 -27
82 82
53 53
4 4
139 -117
227 -29
55 55
莫不是传说中的的补码问题在这里出现了?比如 int的数为129 : 00000000 00000000 00000000 10000001
变为byte后直接用最后一个字节? 10000001 补码变正是~~~~也就是~~~~ -127??
那怎么办?
楼主【fuqiang229】截止到2008-07-15 20:26:04的历史汇总数据(不包括此帖):
发帖的总数量:13 发帖的总分数:230 每贴平均分数:17
回帖的总数量:19 得分贴总数量:3 回帖的得分率:15%
结贴的总数量:12 结贴的总分数:230
无满意结贴数:0 无满意结贴分:0
未结的帖子数:1 未结的总分数:0
结贴的百分比:92.31 % 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
值得尊敬
byte 8位
所以由int转向byte ,高位被截掉了24位。
所以只剩下10000001 了。
http://blog.csdn.net/sunyujia/archive/2008/05/04/2385727.aspx
自己不懂就别乱说别人说的是废话
你去看看byte的取之范围,哪来的190
{
//byte[] b=new byte[]{1,2,3,4};
int mask=0xff;
int temp=0;
int res=0;
for(int i=0;i<4;i++){
res<<=8;
temp=b[i]&mask;
res|=temp;
}
return res;
}
static byte[] int2bytes(int num)
{
byte[] b=new byte[4];
int mask=0xff;
for(int i=0;i<4;i++){
b[i]=(byte)(num>>>(24-i*8));
}
return b;
}