黑马程序员技术交流社区
标题:
关于16进制转换查表法
[打印本页]
作者:
范鹏飞
时间:
2013-3-29 23:22
标题:
关于16进制转换查表法
本帖最后由 范鹏飞 于 2013-3-30 20:26 编辑
class ToBin03
{
public static void main(String[] args)
{
toBin(60);
System.out.println("Hello World!");
}
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<8; i++)//想问这里面的i<8在这儿是什么意思?
{
int temp = num & 15;
System.out.print(chs[temp]);
num = num>>>4;
}
}
}
复制代码
作者:
疯狂程序
时间:
2013-3-29 23:49
运行时,数字都是一个一个出来,到移动位结束后,也是继续右移,打印0
实际上就是显示 8位
例如 0000003c
作者:
李晓峰
时间:
2013-3-30 00:00
一个整数占四个字节,也就是4个8位的二进制位,每次右移1个四位的二进制位,最多可以移动八次。
作者:
HM谢文辉
时间:
2013-3-30 00:02
整型占四个字节,意思就是32位,转换为16进制,每4位换成16位的1位,每次取最后四位,然后向右移4位,要移动8次.
作者:
王廷顺
时间:
2013-3-30 00:29
这里的“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
作者:
何衍其
时间:
2013-3-30 11:34
"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次。
作者:
薛飞
时间:
2013-3-30 13:23
本帖最后由 薛飞 于 2013-3-30 13:28 编辑
int 类型占四个字节,也就是32位。60为int类型,在计算机中以二进制补码存在,要转化为十六进制,每次须移动四位,32/4=8,则最多可移动8次,又因为从i=0开始,故此for循环判定条件设为i<8。当然如果想要程序效率更高,可在移位后判断其是否为0,若为true,则直接break跳出循环,以此来减少循环次数。
作者:
陈丽莉
时间:
2013-3-30 13:35
还有问题的话继续追问~ 么有了就将帖子分类改成【已解决】~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2