移位運算符
Java中有3個移位運算符
左移: <<
帶符號右移:>>
無符號右移:>>>
數 x x<<2 x>>2 x>>>2
17 00010001 01000100 00000100 00000100
-17 11101111 10111100 11111011 00111011
看一下程序0x表示16進制。ffffffff表示-1
public class test {
????public static void main(String[] args) {
????????int i=0xffffffff;
????????int c=i<<2;
????????System.out.println(i);
????????System.out.println(c);
????????}
}
輸出是-1和-4.這表示
public class test {
????public static void main(String[] args) {
????????int i=0xffffffff;
????????int c=i<<2;
????????System.out.println(Integer.toHexString(i));
????????System.out.println(Integer.toHexString(c));
????????}
}
使用Integer.toHexString()將10進制轉換位16進制。
輸出位ffffffff 和fffffffc左移2位最后補2個0,最后的1100轉換位16進制就是c
?
public class test {
????public static void main(String[] args) {
????????int i=0xffffffff;
????????int c=i>>>2;
????????System.out.println(Integer.toHexString(i));
????????System.out.println(Integer.toHexString(c));
????????}
}
無符號右移輸出是ffffffff和3fffffff 右移2位后最左段是0011,轉換位16進制就是3
?
練習:
將一個整數110從右端開始的4到7位變為0.
答:要想將4到7位變為0,先構造一個4到7位是0的數,然后用110和這個數與&。任何數和0與都是0,就完成了任務。要構造一個4到7位是0的數,先構造一個低4位是1的數15,然后將它左移3位,然后取反,就構造成4到7位是0的數了。程序如下。
public class test {
????public static void main(String[] args) {
????????int i=15;
????????int j=i<<3;
????????int c=~j;
????????int k=110;
????????int l=k&c;
????????System.out.println(Integer.toBinaryString(i));
????????System.out.println(Integer.toBinaryString(j));
????????System.out.println(Integer.toBinaryString(c));
????????System.out.println(Integer.toBinaryString(k));
????????System.out.println(Integer.toBinaryString(l));
????????}
}
輸出是
00001111
01111000
10000111
01101110
00000110
?
將一個數左移一位等于是將數*2,右移一位相當于將數/2。
左移2位相當與乘兩次2,右移2位相當與除兩次2.