如何将一个四字节转换为一个整数?以及反过来? java

这个问题考察的意义何在?

package foundation;

import java.util.Arrays;

//如何将一个四字节转换为一个整数?以及反过来?
public class Test7 {

public static void main(String[] args) {
// TODO Auto-generated method stub
// byte []a={1,2,3,4};
// int b=
byte bytes []= {22,22,22,22};
int a = bytes[0]<<24+bytes[1]<<16+bytes[2]<<8+bytes[3];
System.out.println(a);//检验结果
byte bytes2[]=new byte[4];
bytes[0]=(byte)(a>>24);
bytes[1]=(byte)((a>>16)&0xff);
bytes[2]=(byte)((a>>8)&0xff);
bytes[3]=(byte)(a&0xff);
System.out.println(Arrays.toString(bytes));//检验结果
}

}

这是答案,第一个输出是0,第二个是[0,0,0,0] 应该是错了。还有,这个数字代表的编码和实际上的数字的关系是什么,字母呢,可以系统的给我讲一下吗?这个考察的是这个知识点吗?
为什么数组的每一个元素要依次左移8位,然后还要递增?

第1个回答  2014-10-12
关于错误,是在这里
int a = bytes[0]<<24+bytes[1]<<16+bytes[2]<<8+bytes[3];

+与<< 运算符会先算+
所以上面算式变成bytes[0]<<46<<38<<30
很显然经过这么多次左移
a肯定等于0
把算式里面每一项加个括号就可以了
int a = (bytes[0]<<24)+(bytes[1]<<16)+(bytes[2]<<8)+bytes[3];
————————
数字在计算机里面是以二进制存储的
比如22是00010110追问

左移是变大啊,怎么会变小呢?是溢出了吗? 那么int改为long还是不行。
并且按照你改的还是不正确。
你写个程序贴上来我看一下吧,要求就是[22,22,22,22]结果是22222222 然后反过来再写一个方法,可以运行的

算了,位置这个走不通,或者你有时间写完贴上来给我看一下,我用字符串拼接解决了这个问题,换个思路。 我先采纳了。

本回答被提问者采纳
第2个回答  2014-10-11
考察的是移位运算,高效率实现几个数字字符拼接成一个整数
相似回答