当前位置:编程学习 > JAVA >>

java基础,关于移位操作和&和|等操作。。。求科普,就解答。。

1.
private static  String getString(byte value)
    {
        return Integer.toBinaryString(Integer.valueOf((value&0xf0)>>4))+Integer.toBinaryString(Integer.valueOf(value&0x0f));
    }
这个方法中对(value&0xf0)>>4和value&0x0f的作用是什么?
value是byte,做过处理之后是变成int吗?
2.(n << 1) ^ (n >> 31)这句是什么意思?n是int型
3.(value & ~0x7F)这又是什么意思?
通常情况下做位操作的时候对于0xf0和0x0f和0x7f这些选择上有什么讲究吗?

请说的通俗易懂点。 --------------------编程问答-------------------- value是byte类型,有8位,如:0110 1100,(value&0xf0)>>4的结果就是value变成:0000 0110,效果就是取出原来高四位,并移到低四位,再把高四位置0。而value&0x0f的作用就是把value值得高四位置0,低4位不变,结果就是0000 0110
(n << 1) ^ (n >> 31)n是int型,32位,n<<1表示左移一位,如原来:
1000 0000 0000 0000 1000 0000 0000 0001
移完之后:0000 0000 0000 0001 0000 0000 0000 0010 
n>>31 带符号右移31位,如原来:1000 0000 0000 0000 1000 0000 0000 0001移完之后:
1111 1111 1111 1111 1111 1111 1111 1110,因为原来的数最高位是1,所以右移时,高位补1,而不是0
^表示异或,11得0,00得0,10得1,01得1,1000 0001^0011 1100得到:1011 1101
~表示取反,~0000 1111得到:1111 0000
剩下的,自己想把 --------------------编程问答-------------------- byte a = 1;
int c= ((a & 0xf0)>>4) + (a & 0x0f); //得到的是1
int c= (a & 0xf0)>>4 + (a & 0x0f);//得到的是0

这是什么情况?什么原理导致的? --------------------编程问答--------------------
引用 2 楼 caibaozixixi 的回复:
byte a = 1;
int c= ((a & 0xf0)>>4) + (a & 0x0f); //得到的是1
int c= (a & 0xf0)>>4 + (a & 0x0f);//得到的是0

这是什么情况?什么原理导致的?


你最好先看看操作符的优先级, +号的优先级在移位操作之前,也就是说,你下面那句为0 是相当于移动了5位
也就是
int c= (a & 0xf0)>>4 + (a & 0x0f);//得到的是0 
这句相当于
int c= (a & 0xf0)>>(4 + (a & 0x0f));//得到的是0
--------------------编程问答-------------------- 如同上面所说,事关优先级:
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,