A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李凤鸣 中级黑马   /  2012-11-1 14:39  /  3465 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

十进制-->十六进制时
1、可以先将十进制转换成二进制,
2、之后把末四位与15的二进制(1111)做&的运算,得出来的数就是该位置16进制的值
3、之后做>>>4
4、如果前面还有值,重复做2、3

得出来的数就是十六进制的值
想问下为什么与15的二进制做&的运算就是该位置的16进制的值
原理是什么

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 神马都是浮云

查看全部评分

12 个回复

倒序浏览
这个问题。。。拿笔画画你就明白了
回复 使用道具 举报
15的二进制(1111),前面的位是0,
某数与15做&运算后,意义就是取出了某数二进制的后4位。
回复 使用道具 举报
本帖最后由 葬天 于 2012-11-1 14:57 编辑

4位二进制代表一位16进制
15 的二进制 是00000000 00000000 0000000 00001111
一个数 & 15 就等于 取出该数 最低的四位 二进制
刚好 是一个十六进制位
例如
00000000 00000000 0000000 10001001
&
00000000 00000000 0000000 00001111
________________________________________
00000000 00000000 0000000 00001001

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

回复 使用道具 举报
算法我我会,原理不懂
想问的是为什么做 &15 之后得出来的数就是这个位置十六进制的值
举个例子来说吧,为什么不做^15或者|15运算
回复 使用道具 举报
正如10进制时,它的组成元素是0到9,不会出现10,因为满10就进一位了
16进制时,最大会出现15,而四个二进制位能表示的最大十进制数恰好是15
所以想表示出16进制的所有元素,必须要用到四个二进制位,这也就是为什么与15之后
得到的十进制数就是16进制的值
回复 使用道具 举报
葬天 中级黑马 2012-11-1 15:32:15
7#
李凤鸣 发表于 2012-11-1 15:08
算法我我会,原理不懂
想问的是为什么做 &15 之后得出来的数就是这个位置十六进制的值
举个例子来说吧,为 ...

恕我冒昧
这个你如同在问
1 +1 = 2
为什么不是
1/1 = 2
...
1 ×1 = 2
如果想简单的 了解
你查查 运算符 的使用规则
就行了
如果 想深入了解
就跟
去 证明 1 +1 =2 ?这个问题是一样的
回复 使用道具 举报
本帖最后由 李凤鸣 于 2012-11-1 16:00 编辑
葬天 发表于 2012-11-1 15:32
恕我冒昧
这个你如同在问
1 +1 = 2



我知道算完之后是十六进制的,也只能是十六进制的,但是不明白这么算完就是 这个“位置” 的十六进制的值

就跟为什么要做乘法运算或者除法运算,总是知道他的原理是怎么样的才去算吧,运算本身不是问题

你的解释就是做了&15的运算就是这个“位置”的值,没有道理可讲
我就这么记下来就可以了

如果这么推下去,是说要是转换成八进制按这种方法
就是 &7 ,之后>>>3就可以了么
回复 使用道具 举报
林剑 中级黑马 2012-11-1 16:51:06
9#
首先你得明白二进制转十六进制就是把二进制数从右往左4个4个分开,4位对应十六进制中的一位,&15相当于&00000000 00000000 0000000 00001111即保留要转化数的低4位,其他位于上0都为0,将结果转化成十六进制保存进数组中就是转化成十六进制的最低位,再右移4位同样方法处理5-8位数
回复 使用道具 举报
二进制的四位代表十六进制的一位,&15是为了完整的获取最后四位,因为&15不会使原来的1和0发生变化
回复 使用道具 举报
二进制的四位代表十六进制的一位,&15是为了完整的获取最后四位,因为&15不会使原来的1和0发生变化
回复 使用道具 举报
IT_JM 中级黑马 2013-9-29 11:08:36
12#
/*
十进制-->十六进制
*/

class  ToHex
{
        public static void main(String[] args)
        {
                toHex(60);
        }

        public static void toHex(int num)
        {
                //定义一个字符串缓存,存放转换后的字母
                StringBuffer sb = new StringBuffer();

                for(int x=0; x<8; x++)
                {
                        int temp = num & 15;
                        if(temp>9)
                                sb.append((char)(temp-10+'A')); //如果大于9,转化成对应的字母
                        else
                                sb.append(temp);
                        num = num >>> 4; //无符号右移四位,取下四位对应的十六进制位

                }
               
                //得到的十六进制是反序的,需要反转一下
                System.out.println(sb.reverse());
        }
}
希望能够对你有所帮助
回复 使用道具 举报
IT_JM 中级黑马 2013-9-29 11:14:54
13#
十六进制的 0, 1, 2, 3,4, 5, 6,    7,    8,   9,    A,     B,     C,     D,      E,     F,
对应十进制 0, 1, 2, 3,4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,

所以只有与15相与才有可能得到对应的十进制的0~15
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马