为了账号安全,请及时绑定邮箱和手机立即绑定

感觉没什么错,但是期望的结果是8143,而运行结果为7887

感觉没什么错,但是期望的结果是8143,而运行结果为7887

慕粉13727861792 2017-01-29 20:33:25
package java中的数据类型;//整形转化成字节型public class Int_to_Byte {//int转化为字节数组 public static byte change(int b){  byte[] arr=new byte[4];   arr[0]=(byte)((b>>0*8));  return arr[0]; } public static byte[] change2(int a){  byte[] arr1=new byte[4];  for(int i=0;i<arr1.length;i++){   arr1[i]=(byte)((a>>i*8));  }  return arr1; } //byte型转化成int型 public static int[] cheng3(byte[]arr){  int arr2[]=new int[4];  for(int i=0;i<arr.length;i++){   arr2[i]=(int)(arr[i]<<i*8);  }  return arr2; } //输出 public static void main(String arges[]){ byte arr=Int_to_Byte.change(8143);  System.out.println(arr);  byte arr1[]=Int_to_Byte.change2(8143);  System.out.println(arr1[0]+" "+arr1[1]+" "+arr1[2]+" "+arr1[3]);  int arr2[]=Int_to_Byte.cheng3(arr1);  System.out.println(arr2[0]+arr2[1]+arr2[2]+arr2[3]); }}
查看完整描述

1 回答

?
按照自己的节奏前行

TA贡献90条经验 获得超70个赞

//闲的无聊,帮你看看你哪里错了,我给你做了注释
public class Int_to_Byte {
//int转化为字节数组
 public static byte change(int b){  //这个玩意写的乱七八糟,没用
  byte[] arr=new byte[4]; 
  arr[0]=(byte)((b>>0*8)); //这里你相当于没有移位,把一个int类型进行强转,结果失真,默认保留最后8位,
                            //但是,小朋友,byte是一个8位的,且带符号,这个你得到出来的范围肯定在-127到128之间
  return arr[0];           //没用,因为并不是你写个4位的数字,每个数字都占一个字节,想想吧,孩子,前面要补0的
 }
 public static byte[] change2(int a){
  byte[] arr1=new byte[4];
  for(int i=0;i<arr1.length;i++){
   arr1[i]=(byte)((a>>i*8));   //向右移动一位相当于除以2.嗯,你可以想想,你在干啥,依次除以2的8次方的
                               //8的次方的..,没错,你是移动了1个字节,但是不代表你数字也移动了一位
                               //还有,转化失真
  }
  return arr1;
 }
 //byte型转化成int型
 public static int[] cheng3(byte[]arr){  //你以为这是字符串吗?拼一拼就出来了...哈哈哈哈,进制转化多看看
  int arr2[]=new int[4];
  for(int i=0;i<arr.length;i++){
   arr2[i]=(int)(arr[i]<<i*8);
  }
  return arr2;
 }
 //输出
 public static void main(String arges[]){   //这里就没啥说的了,你理解的误区是一个字节代表数字的某个位,
                                            //嗯,这样说吧,你想每次移动一个字节,那就需要2的八次方进制来做,
                                            //这还只是无符号的,这样的话,你得到的哪一位就是当前位数的数字,
                                            //十进制吗,你移动一个字节是想发泄自己的不满吗?
 byte arr=Int_to_Byte.change(8143);
  System.out.println(arr);
  byte arr1[]=Int_to_Byte.change2(8143);
  System.out.println(arr1[0]+" "+arr1[1]+" "+arr1[2]+" "+arr1[3]);
  int arr2[]=Int_to_Byte.cheng3(arr1);
  System.out.println(arr2[0]+arr2[1]+arr2[2]+arr2[3]);
 }
}


查看完整回答
1 反对 回复 2017-01-30
  • 1 回答
  • 0 关注
  • 1031 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信