黑马程序员技术交流社区
标题:
查表法--十进制转换为十六进制
[打印本页]
作者:
高薇
时间:
2012-7-31 09:32
标题:
查表法--十进制转换为十六进制
请教:public static void main(String[] args)
{
toHex(60);
}
public static void toHex(int num)
{
//定义char类型的数组存放十六进制元素
char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//定义一个临时容器
char[] arr=new char[8];//默认初始化值:‘\u0000’
int pos=arr.length-1;
while(num!=0)
{
int temp=num&15;
arr[--pos]=chs[temp];
num=num>>>4;
}
//存储数据的arr数组遍历
for(int x=pos;x>=arr.length-1;x++)
{
System.out.print(arr[x]+",");
}
}
这个,用的多吗?顺便帮忙解释下,怎么都看不明白,晕晕的~
Thank you!
作者:
黑马-王言龙
时间:
2012-7-31 10:28
这是在学原理性知识,java有专门的处理方式。
public class Demo {
public static void main(String[] args) {
Integer i = 60;
System.out.println(Integer.toHexString(i));//3c
}
}
复制代码
作者:
赵建飞
时间:
2012-7-31 10:53
添加了些注释,仔细看下视频,不是很难理解。主要用来练习逻辑思维。
class HexDemo
{
public static void main(String[] args)
{
toHex(60); //主函数对进制转换方法的调用
}
public static void toHex(int num)
{
//定义char类型的数组存放十六进制元素
char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//定义一个临时容器
char[] arr=new char[8];//默认初始化值:‘\u0000’
int pos=arr.length; //获得
while(num!=0) //整个循环就是要把32个二进制位四个一组转换成其对应的十六进制数
{
int temp=num&15; //通过 “与” 操作获得 32个二进制位 中的一组 二进制位(四位一组),并转换成其对应的十进制数
arr[--pos]=chs[temp];//把得到的十进制数作为下标在CHS数组中获得这个十进制数对应的十六进制数
num=num>>>4; //把要转换的数无符号右移四位,以便再次循环
}
//存储数据的arr数组遍历
//输出存放在arr数组中转换好的十六进制
for(int x=pos;x<=arr.length-1;x++)
{
System.out.print(arr[x]+",");
}
}
}
复制代码
作者:
黑马-王言龙
时间:
2012-7-31 10:58
public class Demo {
public static void main(String[] args) {
toHex(60);
}
public static void toHex(int num) {
// 定义char类型的数组存放十六进制元素
char[] chs = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
// 定义一个临时容器
char[] arr = new char[8];//
int pos = arr.length - 1;
while (num != 0) {
//60,int型,占4个字节,32位,二进制表示为:(前面26个0省略)111100。取其取低四位
int temp = num & 15;
//用拿到的四位查chs字符表,放在定义的char数组中。
arr
[pos--]
= chs[temp];
//二进制数右移4位(因为16进制数用二进制的4位来表示)
num = num >>> 4;
}
// 存储数据的arr数组遍历,查看其中存入的字符,即表示十进制数的16进制形式。
for (int x = pos
+1
; x
<=
arr.length - 1; x++) {
System.out.print(arr[x]);
}
}
}
作者:
刘海源
时间:
2012-7-31 11:04
:public static void main(String[] args)
{
toHex(60);
}
public static void toHex(int num)
{
//定义char类型的数组存放十六进制元素
char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//定义一个临时容器
char[] arr=new char[8];//默认初始化值:‘\u0000’
int pos=arr.length-1;
while(num!=0)
{
int temp=num&15;//因为十五的二进制是1111而十六进制是四个毕克伟为一个数的,这一步是为
//了截取一个数的二进制位而转变成十六进制
arr[--pos]=chs[temp];//从后往前存入数据
num=num>>>4; //这步是为了将该数的二进制位向右移位的剔除已经识别过的
}
//存储数据的arr数组遍历
for(int x=pos;x>=arr.length-1;x++)//遍历数据
{
System.out.print(arr[x]+",");
}
}
这个主要学会进制转换就可以明白的,
二进制 00000000 00000000 00000000 00000000
八进制 00000000 00000000 00000000 00000000
三个毕克伟为一个单位就是00000000 000 000 000 000 000 000 000 000正好八位进制数是7
十六进制同理了
作者:
杨志
时间:
2012-7-31 13:23
本帖最后由 杨志 于 2012-7-31 13:25 编辑
这里要理解一个东西!
就是计算机对数据的操作是使用的补码!而不是原码!
但是对于正数,原码和补码是一样的。负数需要考虑符号位。
还有就是这里其实是先将十进制数变成2进制,然后再将2进制的数变成16进制。
那么2进制的数据和16进制的数据怎么准换呢。
其实很简单,就是16进制的数据的1位就刚好等于2进制的数据的4位。
这样的话,就可以解释下面的代码了。
int temp=num&15;
复制代码
这一句代码的意思就是
将传入的十进制数的补码和15的补码进行相与操作。
那么与操作的原理是全1为1,否则为0,如1100&1010=1000;
而15的补码为:00000000-00000000-00000000-00001111;
那么就可以刚好取得num的后四位。比如num 如果为60.
那么它的补码就是:
00000000-00000000-00000000-00111100
这样和15相与 那么就得到
00000000-00000000-00000000-00001100
也就是得到了60的2进制的后四位。其实也就是相当于16进制的最后一个数字。
然后再存入数组当中。
而这个数字又是和chs表中的数字是对应的。所有就可以直接存入结构当中的最后一位。
然后:
num=num>>>4;
复制代码
的目的就是讲60的后四位右移。右移之后就会变成:
00000000-00000000-00000000-00000011.
然后再去获取它的低 四位,重复上面的操作。知道num变成0为止。
核心代码就这些。希望对你有用!谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2