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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马姗姗 中级黑马   /  2014-1-6 13:50  /  1227 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马姗姗 于 2014-1-6 22:04 编辑

byte[] buffer ;
int[] databuf   =new int[buffer.length];

                for (int i = 0; i < buffer.length; i++) {
                        databuf = (int) ((buffer + 256) % 256);
                }
求大神解释下循环中的意思

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

4 个回复

倒序浏览
这么搞一下就该看明白了吧
byte[] buffer = {-128,-127,-2,-1,0,1,2,126,127};
int[] databuf = new int[buffer.length];
               
System.out.println(Byte.MIN_VALUE+"***"+Byte.MAX_VALUE);
for (int i = 0; i < buffer.length; i++)
{
        databuf[i] = (int) ((buffer[i] + 256) % 256);
        System.out.print(databuf[i]+",");
}
输出结果:
-128***127
128,129,254,255,0,1,2,126,127,
//这不就正好把byte类型转化成正数的int类型了,只不过负值被转化到了128~255之间。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
  1. byte[] buffer;//声明一个byte类,命名为buffer

  2. int[] databuf = new int[buffer.length];//创建一个int类型 名叫 databuf的数组,其元素个数为  buffer.length

  3. for (int i = 0; i < buffer.length; i++)
  4. {
  5.         databuf[i] = (int) ((buffer[i] + 256) % 256);
  6. }

  7. 循环的意思是:
  8. 【1】定义一个变量i等于0,判断i是否小于buffer.length,如果小于,执行下面的语句
  9. 【2】databuf[i] = (int) ((buffer[i] + 256) % 256);
  10.           先把 databuf数组中 角标是[i]的元素  与 256 相加的结果再和 256 求余,所得的结果强制转换成int类型,再把这个结果赋值 给databuf数组中 角标是[i]的这个元素
  11. 【3】然后i+1,再回到第二个条件,判断i是否小于buffer.length  如果小于,再循环一次【1】【2】;如果大于,那循环结束
复制代码



简单的分析了一下过程和内容,若有不足,见谅。先供你参考。

评分

参与人数 1技术分 +2 收起 理由
田磊阳 + 2

查看全部评分

回复 使用道具 举报
java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。
int 是非负整数类型

databuf = (int) ((buffer + 256) % 256);
就是把负的byte数字转换成非负的

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
还可以这样搞法,还以为自动提升呢,真是看不懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马