十进制转换成十六进制小程序(强制转换和移位运算符)

来源:互联网 发布:外国人怎么看中国 知乎 编辑:程序博客网 时间:2024/06/06 03:58

涉及知识点:强制类型转换,移位运算符,十进制转换十六进制。

十进制数 60 转换成十六进制过程分析

60的二进制表示:

   0000-0000  0000-0000  0000-0000  0011-1100

&0000-0000  0000-0000  0000-0000  0000-1111    //与运算,和15与运算得到60的十六进制的最后一位。

=0000-0000  0000-0000  0000-0000  0000-1100   //即60的十六进制数,最后一位是12,也就是C。

移位运算符:

然后右移四位,移位运算符 “>>” 和 "<<" ,“>>” 运算符用符号位填充高位,"<<" 运算符用0填充低位。

还有一个右移运算符 ">>>" 用 0 填充高位。

本例中使用 ">>>"。

所以60右移四位后为:

   0000-0000  0000-0000  0000-0000  0000-0011

&0000-0000  0000-0000  0000-0000  0000-1111    //继续和 15 进行与运算。

=0000-0000  0000-0000  0000-0000  0000-0011    //得到3,即60的十六进制是 3C。

强制类型转换:

12 怎么转换成16进制的 'C' 呢?如下

char t = 2 + 'A' ; // int 类型强制转换为char类型,前面加char,输出为char类型的 'C'。t = 'C' ;t = 2 + 'A' ;  //无强制转换,默认输出 int 类型,char类型转换为对应的ASCII码输出。t = 67;

不同数据类型的数据参与运算,数据类型要强制转换,转换方向是:

(unsigned)char,(unsigned)short->int->unsigned->long->unsigned long->float->double

合法的类型转换见图:

实心箭头表示无信息丢失的转换,虚线箭头表示有精度损失。

代码分析:

public class DtoH {    public static void main(String[] args) {        toHex(60);    }    public static void toHex(int num) {        for(int x=0; x<8; x++) {            int temp = num & 15;      //和 1111(二进制) 进行与运算,得到十六进制的最后一位。            if(temp>9)                System.out.println((char)(temp-10+'A'));   //大于9则转换成十六进制,将10、11、12、13、14、15对应输出为 A、B、C、D、E。            else                System.out.println(temp);            num = num >>> 4;        //右移四位,继续与运算。        }    }}

(char)(temp-10+'A')
就表示强制转换,12-10+‘A'  转换成 char 类型 ,结果为 'C' 。

代码结果为


即结果为 3C