黑马程序员技术交流社区
标题:
char型数据的运算和转换
[打印本页]
作者:
焦晨光
时间:
2012-7-18 08:58
标题:
char型数据的运算和转换
本帖最后由 焦晨光 于 2012-7-18 11:53 编辑
今天看到一个解决10进制转换16进制的程序
从键盘输入一个10进制数,然后根据10进制转16进制的规则 整除取余
假设从键盘输入10进制1234 将其转换成 16进制
int p=1234%16
将p的值传入下面的方法
public static char toHexChar(int hexValue){
if(hexValue<=9 && hexValue>=0)
return (char) (hexValue+'0');
else
return (char) (hexValue-10+'A');
}
方法体里面的语句是如何将1-15变成16进制的表达形式的?
书上只给出了运行结果
然后我查阅了char数据与数值型数据之间的转换知识点
但是讲的不是很清楚 我初学 看不太懂
希望大家能帮我详细解释一下 char型数据的运算和转换这方面的知识点
谢谢大家!
作者:
田建
时间:
2012-7-18 09:42
本帖最后由 田建 于 2012-7-18 09:46 编辑
这个涉及到ASCII码表,在ASCII码表里,‘0’是64,‘A’是65,后面的依此类推,所以当hexValue<=9 && hexValue>=0时,可以通过(char) (hexValue+'0');来转,而因为16进制中9以上是用A、B、C、D、E、F表示,所以说要将其转成响应字符,即(char) (hexValue-10+'A');
(char) (hexValue-10+'A');-->比如说hexValue是15,减去10是5,加上'A'对应的ASCII码,就是70,而70在ASCII码表里对应的就是‘F’,因而就完成了转换!
作者:
梁小波
时间:
2012-7-18 09:44
你问的是toHexChar这个方法吗?
它的作用其实是把1-15变成16进制的表达形式,正如你说的;
下面是一个判断;如果hexvalue在1-9之间,那么不变即hexValue+'0'!由于hexvalue是int型的数字,
所以加上‘0’;它的ascii码的值会变成相应的字符型的。那么用char强转后就是相应的char型了;
而hexvalue在10-15之间的话变成的是a-f的字符;所以要加'a';
最关键要理解字符在计算机中的表示;
其实char是数字组成的,即ascii码;计算机会判断该数字是表示数字还是字符?
如果是数字,不变。如果是字符,转化相应的ascii码表中对应的字符。
所以利用偏移的量hexvalue+字符。再强转会得到你想要的字符;(针对上题说的)
作者:
康大玮
时间:
2012-7-18 09:51
本帖最后由 康大玮 于 2012-7-18 10:00 编辑
16进制:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F;
这要涉及到编码表ASCII编码表
A在编码表中是‘65’,B---66,C---67,D---68,E---69,F---70;
当数字大于等于10小于等于15的时候电脑里面是用A,B,C,D,E,F代替
所以就有 (char) (hexValue-10+'A');
作者:
康大玮
时间:
2012-7-18 09:57
毕老师的视频里也有
/*
十进制-->十六进制。
*/
public static void toHex(int num)
{
StringBuffer sb = new StringBuffer();
for(int x=0; x<8; x++)
{
int temp = num & 15;
if(temp>9)
//System.out.println((char)(temp-10+'A'));
sb.append((char)(temp-10+'A'));
else
//System.out.println(temp);
sb.append(temp);
num = num >>> 4;
}
System.out.println(sb.reverse());
}
查表法
class ArrayTest7
{
public static void main(String[] args)
{
}
/*
十进制-->二进制
*/
public static void toBin(int num)
{
trans(num,1,1);
}
/*
十进制-->八进制
*/
public static void toBa(int num)
{
trans(num,7,3);
}
/*
十进制-->十六进制
*/
public static void toHex(int num)
{
trans(num,15,4);
}
public static void trans(int num,int base,int offset)
{
if(num==0)
{
System.out.println(0);
return ;
}
char[] chs = {'0','1','2','3'
,'4','5','6','7'
,'8','9','A','B'
,'C','D','E','F'};
char[] arr = new char[32];
int pos = arr.length;
while(num!=0)
{
int temp = num & base;
arr[--pos] = chs[temp];
num = num >>> offset;
}
for(int x=pos; x<arr.length; x++)
{
System.out.print(arr[x]);
}
return ;
}
}
作者:
黑马-王言龙
时间:
2012-7-18 10:18
public static char toHexChar(int hexValue){
if(hexValue<=9 && hexValue>=0) //如果算得的结果是0-9的数,则将其转成字符打印
return (char) (hexValue+'0');
else
return (char) (hexValue-10+'A'); //否则打印用字母表示的数值,即打印用ABCDE表示的10、11、12、13、14、15
}
复制代码
作者:
陈冲
时间:
2012-7-18 10:51
public static char toHexChar(int hexValue){
if(hexValue<=9 && hexValue>=0)
return (char) (hexValue+'0');
else
return (char) (hexValue-10+'A');
}
复制代码
A,B,C,D,E,F在ASCII码中对应的编码是65,66,67,68,69,70
(char) (hexValue-10+'A')语句中,如果hexValue=15,则hexValue-10+'A'就把字符A转化为ASCII编码 65,相当于 15-10+65=70,再将70强制转化为字符型,也就是F;
A,B,C,D,E的计算方法同上
作者:
杨康
时间:
2012-7-18 11:10
对于16进制,为了表示方便,对于1-9,与10进制的数表示形式一样。
对于10-15,分别用'A','B','C','D','E','F'来表示。
而'A'在ASCII中对应的数字是65,依此类推。
进制转换的思想就是不断的%16,除以16的过程。
不断的取余过程,判断余数的范围,如果大于9就要转换成对应的字符表现形式。
作者:
刘霄翔
时间:
2012-7-18 11:56
这里面涉及到了ASCII码表的知识
public static char toHexChar(int hexValue)
{
if(hexValue<=9 && hexValue>=0)
return (char) (hexValue+'0');//
else
return (char) (hexValue-10+'A');//
}
16进制中,对于大于等于10,小于等于15的数用A,B,C,D,E,F代替;
在ASCII码表中,A--65,B--66,C---67,D---68,E---69,F---70;
char型数值都有自己对应的ASCII码值,(hexValue-10+'A')的计算方法是先将字符'A'转成对应的ASCII码值后,再与hexValue-10运算,得到的数值也是ASCII码值,再用char将ASCII码值强制转换成字符。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2