黑马程序员技术交流社区
标题:
没搞懂char[] arr=new char[8];//
[打印本页]
作者:
转角~依然笑
时间:
2012-11-29 20:11
标题:
没搞懂char[] arr=new char[8];//
char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B',
'C','D','E','F'};
char[] arr=new char[8];//这里为什么是8呢?
int pos=arr.length;//pos指针,从最后一个位置添加元素,这样就不用反序
while(num!=0){
int temp=num&15;
arr[--pos]=chs[temp];
num=num>>>4;
}
for(int x=pos;x<arr.length;x++){
System.out.print(arr[x]+",");
}
作者:
高志鹏
时间:
2012-11-29 20:40
num这个变量从何而来?
作者:
王舒玮
时间:
2012-11-29 21:28
8代表的是数组中的下标是8所对应的数组中的字符
作者:
黑马-王宁
时间:
2012-11-29 22:06
名为arr的数组的大小是8,至于为什么是8,能不能附上完整代码!
作者:
赵学刚
时间:
2012-11-29 22:29
lz的代码是视频里的进制转换的吧,那 char[] arr=new char[8];代表的就是转换后的16进制数的位数,如果按内存最多存储32位二进制来说,每四位二进制转换成一个16进制的话,所得16进制的最大数就是8
作者:
张其辉
时间:
2012-11-29 22:32
你这个用的是查表法吧,哪里不应该是8,应该是数组chs的长度:chs.length;你的应该是把一个数转换为16进制的,看看下面代码希望对你有帮助:
public static void convert3(int n) {
int item = 15;
char[] table = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
String s = "";
while(n > 0) {
int bit16 = n & item;//取n最后4位的值
// System.out.print(table[bit16]);//打印出来
s = table[bit16] + s;
n >>= 4;
}
System.out.println(s);
}
作者:
李百韬
时间:
2012-11-29 22:42
本帖最后由 李百韬 于 2012-11-29 23:16 编辑
int类型为4B=32bit 4位二进制为一位十六进制 所以32/4=8
作者:
郭冬
时间:
2012-11-30 15:55
这个是因为数据类型而得到的8,如果你用大于8的数也可以实现功能,但是会无谓的增加内存使用量。可以说是杀鸡用了宰牛刀了。
1、程序的功能是把十进制的数转为十六进制,且被转的十进制数是int类型的,int类型的数据在内存中占4字节,也就是32位。
2、4位二进制数可以表示的最大十进制数是15,所以一个4位的二进制数刚好能与16进制数一一映射(即一一表示)。
3、一个int类型的整形数有32位,则可以表示8个16进制数,所以用长度为8的字符数组刚好够用。
作者:
转角~依然笑
时间:
2012-12-7 21:23
赵学刚 发表于 2012-11-29 22:29
lz的代码是视频里的进制转换的吧,那 char[] arr=new char[8];代表的就是转换后的16进制数的位数,如果按 ...
thank you very much
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2