不知道各位大侠注意没有,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??
那怎么办?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【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  %                  
    值得尊敬
      

  2.   

    int 32位
    byte 8位
    所以由int转向byte ,高位被截掉了24位。
    所以只剩下10000001 了。
      

  3.   

    可以参考
    http://blog.csdn.net/sunyujia/archive/2008/05/04/2385727.aspx
      

  4.   


    自己不懂就别乱说别人说的是废话
    你去看看byte的取之范围,哪来的190
      

  5.   

    int型强制转换为byte,若int数据大于-128~127,则int数据对256取模。小于则直接输出。例如,int为190,大于127,则190%256=-66
      

  6.   

    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;
    }