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

这个问题考察的意义何在?packagefoundation;importjava.util.Arrays;//如何将一个四字节转换为一个整数?以及反过来?publiccl... 这个问题考察的意义何在?

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位,然后还要递增?
展开
 我来答
zhf19910
2014-10-12 · TA获得超过114个赞
知道答主
回答量:83
采纳率:100%
帮助的人:81.3万
展开全部
关于错误,是在这里
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 然后反过来再写一个方法,可以运行的

算了,位置这个走不通,或者你有时间写完贴上来给我看一下,我用字符串拼接解决了这个问题,换个思路。 我先采纳了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wanglei980823
2014-10-11 · TA获得超过103个赞
知道小有建树答主
回答量:216
采纳率:0%
帮助的人:77万
展开全部
考察的是移位运算,高效率实现几个数字字符拼接成一个整数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式