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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范鹏飞 中级黑马   /  2013-3-29 23:22  /  1915 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 范鹏飞 于 2013-3-30 20:26 编辑
  1. class ToBin03
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 toBin(60);
  6.                 System.out.println("Hello World!");
  7.         }
  8.         public static void toBin(int num)
  9.         {
  10.                 char[] chs = new char[]{'0','1','2','3'
  11.                                                 ,'4','5','6','7'
  12.                                                 ,'8','9','A','B'
  13.                                                 ,'C','D','E','F'};
  14.                 for (int i=0; i<8; i++)//想问这里面的i<8在这儿是什么意思?
  15.                 {
  16.                         int temp = num & 15;
  17.                         System.out.print(chs[temp]);
  18.                         num = num>>>4;
  19.                 }
  20.         }
  21. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

7 个回复

倒序浏览
运行时,数字都是一个一个出来,到移动位结束后,也是继续右移,打印0
实际上就是显示 8位
例如 0000003c

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
一个整数占四个字节,也就是4个8位的二进制位,每次右移1个四位的二进制位,最多可以移动八次。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
整型占四个字节,意思就是32位,转换为16进制,每4位换成16位的1位,每次取最后四位,然后向右移4位,要移动8次.

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
这里的“i < 8”其实是表示数位的有效位长度。你这里打印的结果是C3000000,正好8位有效数位,如果你这里改为 i < 4,他会输出C300, 是4位有效数位,改为 i < 16,会输出C300000000000000是16位有效数位。如果你输入的要转换为16进制的是一个比较大的数,比如:toBin(999999999); 将”i “改为小于10,输出的结果是:FF9CA9B300.所以根据你输入的十进制的数的大小来定义变量”i“的范围。参考如下代码:
class ToBin

{

        public static void main(String[] args)

       {

                toBin(999999999);

                System.out.println();

        }
         public static void toBin(int num)
        {

               char[] chs = new char[]{'0','1','2','3'
                                                ,'4','5','6','7'

                                               ,'8','9','A','B'

                                               ,'C','D','E','F'};

               for (int i=0; i<10; i++)//想问这里面的i<8在这儿是什么意思?

                {

                       int temp = num & 15;

                       System.out.print(chs[temp]);

                        num = num>>>4;

                }

        }

}

输出结果:FF9CA9B300

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
"i<8“是for语句的退出条件,不知道这是不是你想问的。
for (int i = 0; i < 8; i++){
    ...
}
执行步聚是:
1,int i = 0; // 仅执行一次
2,i < 8; //  再次判读i 的值是否小于8,小于则进入循环体,否则跳出循环。现在i 的值为0,进入循环体
3,如果i 的值小于8,执行循环体中的语句
4,i++; // 在循环体中的语句执行完成后
5,重复2~4步骤。

i 初始值0为,且i 要小于8,它各次迭代的值是:0,1,。。。,7。 共8次。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
薛飞 中级黑马 2013-3-30 13:23:43
7#
本帖最后由 薛飞 于 2013-3-30 13:28 编辑

int 类型占四个字节,也就是32位。60为int类型,在计算机中以二进制补码存在,要转化为十六进制,每次须移动四位,32/4=8,则最多可移动8次,又因为从i=0开始,故此for循环判定条件设为i<8。当然如果想要程序效率更高,可在移位后判断其是否为0,若为true,则直接break跳出循环,以此来减少循环次数。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
还有问题的话继续追问~  么有了就将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马