黑马程序员技术交流社区

标题: 对于视频里面讲到高四位和低四位进行换位不懂??? [打印本页]

作者: 张庚    时间: 2013-2-3 12:27
标题: 对于视频里面讲到高四位和低四位进行换位不懂???
本帖最后由 张向辉 于 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);
               

        }
}

这个感觉那时候听的云里雾里的,现在也不怎么看到饿懂了 那个看懂的给解释下啊 谢谢!!
就是第三天的视频里面讲到得。
作者: 王昕    时间: 2013-2-3 14:26
本帖最后由 王昕 于 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 或一下 就等于没变。这程序就是分别把高四位和低四位用“与”清零,然后移位,再用“或”拼在一起。这个过程你要用二进制字节来思考,不用管它高四位或者低四位被清零以后十进制变成了多少。
作者: dzr19850306    时间: 2013-2-6 14:34
换位操作是通过将低位的数值取出来,然后再将高位的数值取出来,最后ABCD EFGH  变成 EFGH ABCD.
2进制数具有一个特点,与1为原来数据,交0为0.所以、00001111  ABCDEFGH=0000efgh,11110000.ABCDEFGH=abcd0000




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2