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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张向辉 于 2013-2-6 14:34 编辑

class OperateTest2
{
        public static void main(String[] args)
        {

                /*
                对一个整数的最后一个字节,高四位和低四位进行换位。

                int num = 0101-1100 & 255;
                1100-0101

                61 = 0011-1101
                         1101-0011 = 211


                */
                int num = 61;
               
                int n1 = num & 15;//低四位
                int n2 = num & (15<<4);//高四位


                int n = n1<<4 | n2>>>4;


                System.out.println("n="+n);
               

        }
}

这个感觉那时候听的云里雾里的,现在也不怎么看到饿懂了 那个看懂的给解释下啊 谢谢!!
就是第三天的视频里面讲到得。

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 王昕 于 2013-2-3 14:29 编辑

num & 15
15二进制是 0000 1111
一个数,比如61和它进行“与”运算,高四位必然清零,低四位保持不变。保存在n1里,是0000 1101。
15<<4
15左移四位是 1111 0000
那么就是61的低四位被清零,变成0011 0000。
下面 n1 左移4位,右边补0,n2 右移4位,左边补0。
它俩“或”一下,就是拼在一起了,因为一个高四位全0,另一个低4位全0,某些位和0000进行“|”运算,结果就是它本身没边。

其实就是一个数的某些位和 0 与一下 就会被清零,和 0 或一下 就等于没变。这程序就是分别把高四位和低四位用“与”清零,然后移位,再用“或”拼在一起。这个过程你要用二进制字节来思考,不用管它高四位或者低四位被清零以后十进制变成了多少。

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
换位操作是通过将低位的数值取出来,然后再将高位的数值取出来,最后ABCD EFGH  变成 EFGH ABCD.
2进制数具有一个特点,与1为原来数据,交0为0.所以、00001111  ABCDEFGH=0000efgh,11110000.ABCDEFGH=abcd0000
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马