A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kid1943 中级黑马   /  2014-10-19 02:03  /  1519 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    最近无意中查到了一些关于byte转int的代码
    代码片段如下
  1. public static String bytes2HexString(byte[] b) {
  2.   String ret = "";
  3.   for (int i = 0; i < b.length; i++) {
  4.    String hex = Integer.toHexString(b[i] & 0xFF);
  5.    if (hex.length() == 1) {
  6.     hex = '0' + hex;
  7.    }
  8.    ret += hex.toUpperCase();
  9.   }
  10.   return ret;
  11. }
复制代码

为什么 b&0xFF两个数相与后不是还是8位吗?为什么会变成int?

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

8 个回复

倒序浏览
byte与int做运算,最终是会变成int类型的
回复 使用道具 举报
这里用到了 自动类型提升
  1. class Vardemo
  2. {
  3.         public static void main (String[] args)
  4.         {
  5.                 int  x = 3;
  6.                 byte b = 5;
  7.                 x = x + b;
  8.         //b原为byte型,因为x为int型,所以b自动类型提升为int型运算。
  9.        
  10.                 System.out.println(x);
  11.         }
  12. }
复制代码


数据类型自动提升
1 所有的byte型,short型和char的值提升为 int型
2 如果一个操作数是long型,计算结果就是long型
3 如果一个操作数是float型,计算结果就是float型
4 如果一个操作数是double型,解算结果就是double型
回复 使用道具 举报
没看到这。。
回复 使用道具 举报
byte的8位,int是32位,在转换时,要把byte缺少的那24位全部补上0,&0xFF就是补0.我印象里是这么回事。
回复 使用道具 举报
nerveva2000 发表于 2014-10-19 10:29
这里用到了 自动类型提升

但这跟与运算又有什么关系呢?况且相与的两个数b 和0xff 都是8位
回复 使用道具 举报
kid1943 中级黑马 2014-10-20 16:19:12
7#
HM2014nuli 发表于 2014-10-19 07:31
byte与int做运算,最终是会变成int类型的

0xff是int类型吗?
回复 使用道具 举报
kid1943 发表于 2014-10-20 16:18
但这跟与运算又有什么关系呢?况且相与的两个数b 和0xff 都是8位

上面是将byte[]转化十六进制的字符串,注意这里b & 0xFF将一个byte和 0xFF进行了与运算,然后使用Integer.toHexString取得了十六进制字符串,可以看出
b & 0xFF运算后得出的仍然是个int,那么为何要和 0xFF进行与运算呢?直接 Integer.toHexString(b);,将byte强转为int不行吗?答案是不行的.

其原因在于:
1.byte的大小为8bits而int的大小为32bits
2.java的二进制采用的是补码形式

http://blog.csdn.net/zzycgfans/article/details/6782989

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
kid1943 中级黑马 2014-10-21 10:11:09
9#
nerveva2000 发表于 2014-10-20 16:41
上面是将byte[]转化十六进制的字符串,注意这里b & 0xFF将一个byte和 0xFF进行了与运算,然后使用Integer.to ...

谢谢你 现在大概明白了 之前不理解是因为没看清楚toHexString所传的参数是int类型 ,还有这里的0xff可以是不是理解为0x000000ff呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马