本帖最后由 Shimano 于 2013-12-7 11:52 编辑
- public class JinZhiZhuanHuan
- {
- public static void main(String[] args)
- {
- int num = 60;
- //int num = -123456;
- toHex(num);
- }
- 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
- //Syetem.out.println(temp);
- sb.append(temp);
- num = num >>> 4;
- //num = num >>4;//运行结果与无符号右移运算符一样为:FFFE1DC0
- }
- System.out.println(sb.reverse());
- }
- }
复制代码 /* 用(>>>)或(>>)
当int num = 60;时,运行结果是:0000003C
当int num = -123456;时,运行结果是:FFFE1DC0
*/
/*
这是十进制转换十六进制的相关代码,有点不懂无符号右移在此处的用法,
既然,for循环中用x=0; x<8;规定了循环的次数,也就限定了右移的次数,
那么不管这个数是正数还是负数,右移后最高位补0或者1都不会影响计算的。
也就是说,即便是一个负数,右移后最高位补1,当进行了8次右移后,循环结束,
也不影响temp & 15 这个运算。
并且,我把无符号右移运算符(>>>)改为右移运算符(>>),运行结果一样正确,
在这我想请教一下,关于(>>>)和(>>)的用法,关键是此处temp & 15 的具体体现,
*/
|