• 基础内容简介

在做转换之前先要明确几个简单的概念。首先本文是以java为语言,以int为例子。 long数据类型在原理上是一致的。

1  int 在java中是32位, byte是8位。

2  原码,反码,补码简介

原码:就是二进制码,最高位为符号位,0表示正数,1表示负数,剩余部分表示真值。

反码:在原码的基础上,正数反码就是他本身,负数除符号位之外全部按位取反。

补码:正数的补码就是自己本身, 负数的补码是在自身反码的基础上加1.

3  看到这里又涉及到了一个按位与的操作, 所以我们要理解&(与), | (或), ^ (异或),~ (按位取反)

& :当2个都为1的时候为1, 其他都是0 。 1&1 = 1, 1&0 = 0, 0&0 = 0; 他的作用是清0

| : 当2个只要有一个为1,就是1. 1|0 = 1; 0|0 = 0,  1|1 = 1;

^: 相同为0, 不相同为1, 1^0 = 1, 1^1 = 0,  0^0 = 0; 他的作用是定位翻转。

~: 按位取反,0变为1, 1变为0;

之所以要明确原码,反码,补码,是因为java中变量都是以补码的形式保存的。

      比如 整行30 他的原码是:0001 1110. 正数,所以反码,补码都是0001 1110.

对于负数:-7 ,他的原码是 1000 0111, 第一位1表示是此数是负数。他的反码是:1111 1000, 补码在反码的基础上加1, 所以它的补码是1111 1001, 所以他的二进制数就是1111 1001. 对于负数根据二进制求真值,就是再补码的基础上再求补码。 而之所以引入补码的原因是因为: 1 如果用源码,那么0000 0000 和1000 0000 貌似都0, +0 , 和- 0. 所以这造成了问题,第二个原因是因为cpu计算器只有加法没有减法, 减法需要用正数和负数相加得到。

如“-16+11”的运算:

11110000     + -16的补码

00001011       11的补码

————

11111011       - 5的补码

    4  因为byte是8位,int是32位所以在转换过程中,肯定涉及到了移位, 在java中<<  (左移), >>(带符号右移), >>>(无符号右移)

<< 左移,比如,  a << b, a表示需要移位的整行, b表示向左移动的位数, 左移的规则是,右端(低位)补0, 丢去高位

比如 0000 0000 0000 0110, 左移2位就是0000 0000 0001 1000. 如果移动的位数大于32, 那么就需要取余, 比如移动34位,那么实际应该是 : 34%32 = 2, 左移2位。左移在不溢出的情况下移动一位就相当于乘2。

>>右移,比如 , a >>b, a表示需要变换的数值, b表示移动的位数,右移的一点要明确,符号位不变,左端(高位)补充的是符号位,比如 0000 0000 0000 1011, 右移2位是 1100 0000 0000 0010. 负数的移位高位补充的是1, 因为这个,所以变换的时候需要&0xFF.

>>>无符号右移,顾名思义是指移动的时候不考虑符号,右移的时候高位补0.

  • 代码

明确了以上概念,写代码反而简单了:

  /*** int到byte[] 由高位到低位* @param i 需要转换为byte数组的整行值。* @return byte数组*/public static byte[] intToByteArray(int i) {byte[] result = new byte[4];result[0] = (byte)((i >> 24) & 0xFF);result[1] = (byte)((i >> 16) & 0xFF);result[2] = (byte)((i >> 8) & 0xFF);result[3] = (byte)(i & 0xFF);return result;}/*** byte[]转int* @param bytes 需要转换成int的数组* @return int值*/public static int byteArrayToInt(byte[] bytes) {int value=0;for(int i = 0; i < 4; i++) {int shift= (3-i) * 8;value +=(bytes[i] & 0xFF) << shift;}return value;}

java中int与byte相互转换相关推荐

  1. java 中 image 和 byte[] 相互转换

    转载自  java 中 image 和 byte[] 相互转换 只需要一个存储了图片信息的二进制串(byte[]) 然后,这样: InputStream buffin = new ByteArrayI ...

  2. Java中Int转byte分析

    针对声明变量 int i = 3,j = 8; int占4个字节,i = 3 在Java二进制表示: 00000000 00000000 00000000 00000011 j = 8 在Java二进 ...

  3. C++中INT与BYTE相互转换

  4. java int byte数组_Java 中int与byte数组转换详解

    1.与运算符的理解(&): 参加运算的两个数据,按二进位进行"与"运算.如果两个相应的二进位都为1,则该位的结果值为1,否则为0.即 0&0=0:0&1=0 ...

  5. Java中int的取值范围的原因

    为什么Java中int型数据取值范围是[-231, 231-1] 为什么Java中int型数据取值范围是[-231,231-1],网上很多解释都存在问题. int是Java中的8种基本类型之一,一个i ...

  6. 关于java中int类型的取值范围等问题

    java中int类型取值范围问题 java中int的类型占4个字节,与操作系统无关,要弄明白int的取值范围问题. 首先,我们来看一下byte的取值范围 byte 大小一个字节. 如:1111 111 ...

  7. java中int与char之间的互相转化

    引言 在介绍java中int与char之间的互相转化之前,让我们先简单的回顾一些会涉及到的知识. 数据类型 在介绍int与char的转换之前,我们先来回顾一下java中的基本数据类型: 类型 大小 包 ...

  8. Java 中Int转String的三种方法

    JAVA 中int类型转String类型的三种通常方法: 1.String.valueOf(int i) 2.Integer.toString(int i) 3.i + ""; / ...

  9. JAVA中int、String的类型转换(亲测)

    int -> String int i=12345; String s=""; 第一种方法:s=i+""; 第二种方法:s=String.valueOf( ...

  10. java中int转成String位数不足前面补零

    转载自:http://ych0108.iteye.com/blog/2174134 java中int转String位数不够前面补零 String.format("%010d", 2 ...

最新文章

  1. MVC+Ninject+三层架构+代码生成 -- 总结(一、數據庫)
  2. java中JUnit单元测试的使用方法
  3. 手撕 CNN 经典网络之 VGGNet(PyTorch实战篇)
  4. ajax 链接java_如何使用ajax将下拉菜单链接到表
  5. 【README】二叉树刷题框架
  6. PNP问题-位姿估计方法梳理(pose estimation)
  7. FreeRTOS(2)---学习FreeRTOS前的准备工作
  8. C++面试题-指针-动态内存指针
  9. Illustrator 教程,如何在 Illustrator 中重新塑造文本?
  10. MAC OS X 技术内幕 学习笔记之一 MAC OS的变迁
  11. PyQt5最详细pyrcc5配置+样式使用
  12. html背景图片固定代码
  13. 电视盒子做文件共享服务器,【当贝市场】智能电视盒子和PC电脑文件共享教程...
  14. 多智能体系统的分布式协同控制——采样控制、脉冲控制、弹性控制
  15. MPC+MPD听音乐
  16. 液晶屏及液晶模组英文行业术语
  17. 专访STEM领域人才资深人工智能图像算法工程师张旦
  18. Android逆向学习(1)--记一次破解某直播盒子App
  19. html 自动排序表格,表格排序.html
  20. 2008年专转本计算机试卷解,2005-2008年专转本计算机真题及答案

热门文章

  1. VS2008安装部署应用程序安装包制作过程
  2. 富士施乐Fuji Xerox DocuCentre-III C6500 驱动
  3. 2020年注册电气工程师基础考试大纲:公共基础(供配电、发输变电相同)
  4. [转载]注册电气工程师(供配电)执业资格考试基础考试大纲
  5. 木材材积表快速计算器_木材材积计算器下载_木材材积速算器普通分级版(电脑版)...
  6. 开源盛世:谈谈开源代码的使用与安全风险
  7. Latex转word的一款软件-Pandoc
  8. latex的下载与安装
  9. MinGW安装及介绍
  10. 教妹学Java(十):Unicode字符集简介