问一个关于int转化为byte的问题,

fuqiang229 2008-07-15 08:25:56
不知道各位大侠注意没有,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??
那怎么办?

...全文
131 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vtudiv 2008-07-16
  • 打赏
  • 举报
回复
int 可以和 byte数据转换.

static int bytes2int(byte[] b)
{
//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;
}

chujun_laiyang 2008-07-16
  • 打赏
  • 举报
回复
看一下c就知道了
flytigerme 2008-07-15
  • 打赏
  • 举报
回复
int型强制转换为byte,若int数据大于-128~127,则int数据对256取模。小于则直接输出。例如,int为190,大于127,则190%256=-66
believefym 2008-07-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fuqiang229 的回复:]
引用 2 楼 believefym 的回复:
楼主想要什么效果

仁兄不是说废话么,
[/Quote]

自己不懂就别乱说别人说的是废话
你去看看byte的取之范围,哪来的190
sunyujia 2008-07-15
  • 打赏
  • 举报
回复
可以参考
http://blog.csdn.net/sunyujia/archive/2008/05/04/2385727.aspx
fuqiang229 2008-07-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 believefym 的回复:]
楼主想要什么效果
[/Quote]
仁兄不是说废话么,
fuqiang229 2008-07-15
  • 打赏
  • 举报
回复
190 变成190 不是-66
joejoe1991 2008-07-15
  • 打赏
  • 举报
回复
int 32位
byte 8位
所以由int转向byte ,高位被截掉了24位。
所以只剩下10000001 了。
believefym 2008-07-15
  • 打赏
  • 举报
回复
楼主想要什么效果

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧