黑马程序员技术交流社区

标题: JAVA中int型数据和byte数组之间的相互转换 [打印本页]

作者: 罗全涛    时间: 2011-12-27 00:37
标题: JAVA中int型数据和byte数组之间的相互转换
本帖最后由 罗全涛 于 2011-12-27 19:51 编辑

byte 8位,int 32位。
1:将1byte变成int,前面添加的24位是1还是0,有什么依据?
2:将4byte变成int,基本思想是什么?
3:将int变成4byte有什么好的方法?
作者: blackbansy    时间: 2011-12-27 02:35
哥们,你这个问题不是转换的问题。你应该这样理解。定义一个变量a为int型,是系统为a分配了一个4个字节大小的内存空间(也就是32位),它并不规定是添0或1,只是随即地分配了空间。int只是一个标识符,并不是int代表着4byte。定义要弄清楚哦。应该是int类型的变量具有4byte的空间。
作者: 刘基军    时间: 2011-12-27 10:56
  1. class Test
  2. {
  3.         public static void main(String [] args) throws Exception
  4.         {
  5.                 //1.
  6.                 byte b = 8;
  7.                 int a;
  8.                 a = b;
  9.                 System.out.println(a+"..."+Integer.toBinaryString(a));
  10.                
  11.                 //2.4byte->int,同理,int->4byte
  12.                 byte [] buf = {1,2,3,4};
  13.                 int n=0;
  14.                 for(int i=0;i<buf.length;i++)
  15.                 {
  16.                         if(i<3)
  17.                         {
  18.                                 n+=buf[i];
  19.                                 n=n<<8;       
  20.                         }
  21.                         else
  22.                         {
  23.                                 n+=buf[i];       
  24.                         }
  25.                 }
  26.                 System.out.println(n+"..."+Integer.toBinaryString(n));

  27.   }
  28. }
复制代码

作者: 刘建宇    时间: 2011-12-27 11:32
如果你定义一个变量是byte型,那么系统就给它分配一个字节的空间,如果你定义一个变量为int型,那么系统就给它分配四个字节的空间,把byte提升为int,就又原本的一个字节空间四个字节空间了
作者: 刘旭    时间: 2011-12-27 12:21
本帖最后由 刘旭 于 2011-12-27 12:23 编辑

你这个说的是计算机底层数据表示的形式。二进制数据表示有原码,反码,补码。计算机一般用补码表示。将byte数据(正数)转换成int型时,可以在二进制原码前面加上24个0,然后再按照规则将其转换成补码。加入byte数据为负数,最高位为1.加入将4byte数据按照你说的转换成int型时,得到的是一个新的数据。具体的得看计算机组成原理。
作者: 罗全涛    时间: 2011-12-27 19:36
刘旭 发表于 2011-12-27 12:21
你这个说的是计算机底层数据表示的形式。二进制数据表示有原码,反码,补码。计算机一般用补码表示。将byte ...

恩,谢谢了,一直想知道的就是这个额。
作者: 罗全涛    时间: 2011-12-27 19:47
本帖最后由 罗全涛 于 2011-12-27 19:47 编辑
monghuan 发表于 2011-12-27 10:56


恩,可以,左移8位,叠加然后在一起左移8位。如果第一个字节直接左移24位,第二个左移16,第三个左移8位,第四个直接加也行。
作者: 罗全涛    时间: 2011-12-27 19:51
谢谢大家,本帖结贴。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2