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

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

十进制数 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值