亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

感覺沒什么錯,但是期望的結果是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 關注
  • 1062 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號