日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

050_整形和字节数组转换

發布時間:2025/5/22 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 050_整形和字节数组转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 整形和字節數組轉換公式

int a = -128 byte[] b = {(byte)(a >> 24), (byte)(a >> 16) , (byte)(a >> 8) , (byte)a} b[0] = (byte)(a >> 24) b[0] = (byte)(a >> 16) b[0] = (byte)(a >> 8) b[0] = (byte)a int result = ((b[0] & 0xFF) << 24) | ((b[1] & 0xFF) << 16) | ((b[2] & 0xFF) << 8) | (b[3] & 0xFF) = (((byte)(a >> 24) & 0xFF) << 24) | (((byte)(a >> 16) & 0xFF) << 16) | (((byte)(a >> 8) & 0xFF) << 8) | (a & 0xFF)

2. 整形和字節數組的互相轉換例子

/*** 整形和字節數組的互相轉換, 當成公式記*/ public class ByteArrayIntChangeStyle {public static void main(String[] args) {for(int i = Byte.MIN_VALUE * 50; i <= Byte.MAX_VALUE; i++) {System.out.println(i + " " + byteArrayToInt(intToByteArray(i)));}}// byte類型的數值與 0xFF按位與, 使得不關心的位全是0 public static int byteArrayToInt(byte[] b) { return (b[0] & 0xFF) << 24 | (b[1] & 0xFF) << 16 | (b[2] & 0xFF) << 8 | b[3] & 0xFF; } // 強制轉換成了byte類型, 丟棄了高位, 所以與 0xFF按位與操作可有可無 public static byte[] intToByteArray(int a) { return new byte[] { // (byte) ((a >> 24) & 0xFF), // (byte) ((a >> 16) & 0xFF), // (byte) ((a >> 8) & 0xFF), // (byte) (a & 0xFF)(byte) (a >> 24), (byte) (a >> 16), (byte) (a >> 8), (byte) a}; }}

3. 分析整形-1和字節數組之間的互相轉換

-1的原碼: 10000000 00000000 00000000 00000001

-1的反碼: 11111111 11111111 11111111 11111110

-1的補碼: 11111111 11111111 11111111 11111111

字節數組byte[] b = new byte[4];

3.1. b[0] = (byte) ((-1 >> 24) & 0xFF) , 存儲的是-1的25-32位的數據

-1的右移24位, 高位用1填補: ?????11111111 11111111 11111111 11111111

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

-1和0xFF按位與: ???????????????00000000 00000000 00000000 11111111

-1和0xFF按位與, 轉換成byte類型, 丟棄掉高位數據: ????????????11111111

-1和0xFF按位與, 轉換成byte類型, 反碼: ??????????????????????11111110

-1和0xFF按位與, 轉換成byte類型, 原碼: ??????????????????????10000001

結果: -1

3.2. b[1] = (byte) ((-1 >> 16) & 0xFF) , 存儲的是-1的17-24位的數據

-1的右移16位, 高位用1填補: ?????11111111 11111111 11111111 11111111

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

-1和0xFF按位與: ???????????????00000000 00000000 00000000 11111111

-1和0xFF按位與, 轉換成byte類型, 丟棄掉高位數據: ????????????11111111

-1和0xFF按位與, 轉換成byte類型, 反碼: ??????????????????????11111110

-1和0xFF按位與, 轉換成byte類型, 原碼: ??????????????????????10000001

結果: -1

?

3.3. b[2] = (byte) ((-1 >> 8) & 0xFF), 存儲的是-1的9-16位的數據

-1的右移8位, 高位用1填補: ?????11111111 11111111 11111111 11111111

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

-1和0xFF按位與: ???????????????00000000 00000000 00000000 11111111

-1和0xFF按位與, 轉換成byte類型, 丟棄掉高位數據: ????????????11111111

-1和0xFF按位與, 轉換成byte類型, 反碼: ??????????????????????11111110

-1和0xFF按位與, 轉換成byte類型, 原碼: ??????????????????????10000001

結果: -1

3.4. b[3] = (byte) (-1 & 0xFF) , 存儲的是-1的1-8位的數據

-1的補碼: ??????????????????????11111111 11111111 11111111 11111111

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

-1和0xFF按位與: ???????????????00000000 00000000 00000000 11111111

-1和0xFF按位與, 轉換成byte類型, 丟棄掉高位數據: ????????????11111111

-1和0xFF按位與, 轉換成byte類型, 反碼: ??????????????????????11111110

-1和0xFF按位與, 轉換成byte類型, 原碼: ??????????????????????10000001

結果: -1

3.5. b = {-1, -1, -1, -1}

3.6. (b[0] & 0xFF) << 24

b[0]的補碼: ?????????????????????????????????????????????????11111111

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

b[0]和0xFF按位與: ??????????????00000000 00000000 00000000 11111111

b[0]和0xFF按位與, 左移24位, 低位0填補:

????11111111 00000000 00000000 00000000

3.7. (b[1] & 0xFF) << 16

b[1]的補碼: ?????????????????????????????????????????????????11111111

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

b[1]和0xFF按位與: ??????????????00000000 00000000 00000000 11111111

b[1]和0xFF按位與, 左移16位, 低位0填補:

????00000000 11111111 00000000 00000000

3.8. (b[2] & 0xFF) << 8

b[2]的補碼: ?????????????????????????????????????????????????11111111

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

b[2]和0xFF按位與: ??????????????00000000 00000000 00000000 11111111

b[2]和0xFF按位與, 左移8位, 低位0填補:

????00000000 00000000 11111111 00000000

3.9. b[3] & 0xFF

b[3]的補碼: ?????????????????????????????????????????????????11111111

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

b[3]和0xFF按位與: ??????????????00000000 00000000 00000000 11111111

3.10. b[0] | b[1] | b[2] | b[3]

b[0]補碼: ???????????????????????11111111 00000000 00000000 00000000

b[1]補碼: ???????????????????????00000000 11111111 00000000 00000000

b[2]補碼: ???????????????????????00000000 00000000 11111111 00000000

b[3]補碼: ???????????????????????00000000 00000000 00000000 11111111

b[0] b[1] b[2] b[3]按位或操作: ?????11111111 11111111 11111111 11111111

b[0] b[1] b[2] b[3]按位或操作反碼: ?11111111 11111111 11111111 11111110

b[0] b[1] b[2] b[3]按位或操作原碼: ?10000000 00000000 00000000 00000001

結果: -1

4. 分析整形128和字節數組之間的互相轉換

128的補碼: 00000000 00000000 00000000 10000000

字節數組byte[] b = new byte[4];

4.1. b[0] = (byte) ((128 >> 24) & 0xFF) , 存儲的是128的25-32位的數據

128的右移24位, 高位用0填補: ???00000000 00000000 00000000 00000000

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

128和0xFF按位與: ??????????????00000000 00000000 00000000 00000000

128和0xFF按位與, 轉換成byte類型, 丟棄掉高位數據: ??????????00000000

結果: 0

4.2. b[1] = (byte) ((128 >> 16) & 0xFF) , 存儲的是128的17-24位的數據

128的右移16位, 高位用0填補: ???00000000 00000000 00000000 00000000

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

128和0xFF按位與: ??????????????00000000 00000000 00000000 00000000

128和0xFF按位與, 轉換成byte類型, 丟棄掉高位數據: ??????????00000000

結果: 0

4.3. b[2] = (byte) ((128 >> 8) & 0xFF), 存儲的是128的9-16位的數據

128的右移8位, 高位用0填補: ???00000000 00000000 00000000 00000000

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

128和0xFF按位與: ??????????????00000000 00000000 00000000 00000000

128和0xFF按位與, 轉換成byte類型, 丟棄掉高位數據: ??????????00000000

結果: 0

4.4. b[3] = (byte) (128 & 0xFF) , 存儲的是128的1-8位的數據

128的補碼: ?????????????????????00000000 00000000 00000000 10000000

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

128和0xFF按位與: ??????????????00000000 00000000 00000000 10000000

128和0xFF按位與, 轉換成byte類型, 丟棄掉高位數據: ??????????10000000

結果: -128

4.5. b = {0, 0, 0, -128}

4.6. (b[0] & 0xFF) << 24

b[0]的補碼: ?????????????????????????????????????????????????00000000

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

b[0]和0xFF按位與: ??????????????00000000 00000000 00000000 00000000

b[0]和0xFF按位與, 左移24位, 低位0填補:

????00000000 00000000 00000000 00000000

4.7. (b[1] & 0xFF) << 16

b[1]的補碼: ?????????????????????????????????????????????????00000000

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

b[1]和0xFF按位與: ??????????????00000000 00000000 00000000 00000000

b[1]和0xFF按位與, 左移16位, 低位0填補:

????00000000 00000000 00000000 00000000

4.8. (b[2] & 0xFF) << 8

b[2]的補碼: ?????????????????????????????????????????????????00000000

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

b[2]和0xFF按位與: ??????????????00000000 00000000 00000000 00000000

b[2]和0xFF按位與, 左移8位, 低位0填補:

????00000000 00000000 00000000 00000000

4.9. b[3] & 0xFF

b[3]的補碼: ?????????????????????????????????????????????????10000000

0xFF的補碼: ????????????????????00000000 00000000 00000000 11111111

b[3]和0xFF按位與: ??????????????00000000 00000000 00000000 10000000

4.10. b[0] | b[1] | b[2] | b[3]

b[0]補碼: ???????????????????????00000000 00000000 00000000 00000000

b[1]補碼: ???????????????????????00000000 00000000 00000000 00000000

b[2]補碼: ???????????????????????00000000 00000000 00000000 00000000

b[3]補碼: ???????????????????????00000000 00000000 00000000 10000000

b[0] b[1] b[2] b[3]按位或操作: ?????00000000 00000000 00000000 10000000

結果: 128

總結

以上是生活随笔為你收集整理的050_整形和字节数组转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。