計算機中一般用補碼來表示,若對於補碼有不清楚之處請參考http://baike.baidu.com/view/377340.htm 負數轉換爲二進制,就是將其相反數(正數)的補碼的每一位變反(1變0,0變1)最後將變完了的數值加1,就完成了負數的補碼運算。這樣就變成了二進制。 舉個例子: 將-1變成二進制。 ①首先確定二進制的位數,假定爲16位,即可以表示-32768到32767的所有十進制整數。 ②將-1的相反數,也就是1表示爲二進制0000 0000 0000 0001(十六進制表示爲0x0001) (由於四位二進制可以表示爲一位十六進制,故一般將二進制按四位進行分段表示) ③將這個二進制變反,可以得到1111 1111 1111 1110(十六進制HEX表示爲0xFFFE) ④將變反後的數值加上1,得到-1的二進制表示1111 1111 1111 1111(十六進制表示0xFFFF) 其他在16位二進制可以表示範圍內的負數均可如此進行計算。 這裏需要注意的是: ①二進制的位數及其可以表示的十進制數的範圍。 ②二進制數碼變反加一的過程。
位運算符主要針對二進制,它包括了:“與”、“非”、“或”、“異或”。從表面上看似乎有點像邏輯運算符,但邏輯運算符是針對兩個關係運算符來進行邏輯運算,而位運算符主要針對兩個二進制數的位進行邏輯運算。下面詳細介紹每個位運算符。
1.與運算符 與運算符用符號“&”表示,其使用規律如下: 兩個操作數中位都爲1,結果才爲1,否則結果爲0,例如下面的程序段。 public class data13 { public static void main(String[] args) { int a=129; int b=128; System.out.println("a 和b 與的結果是:"+(a&b)); } } 運行結果 a 和b 與的結果是:128 下面分析這個程序: “a”的值是129,轉換成二進制就是10000001,而“b”的值是128,轉換成二進制就是10000000。根據與運算符的運算規律,只有兩個位都是1,結果纔是1,可以知道結果就是10000000,即128。
2.或運算符 或運算符用符號“|”表示,其運算規律如下: 兩個位只要有一個爲1,那麼結果就是1,否則就爲0,下面看一個簡單的例子。 public class data14 { public static void main(String[] args) { int a=129; int b=128; System.out.println("a 和b 或的結果是:"+(a|b)); } } 運行結果 a 和b 或的結果是:129 下面分析這個程序段: a 的值是129,轉換成二進制就是10000001,而b 的值是128,轉換成二進制就是10000000,根據或運算符的運算規律,只有兩個位有一個是1,結果纔是1,可以知道結果就是10000001,即129。
3.非運算符 非運算符用符號“~”表示,其運算規律如下:
如果位爲0,結果是1,如果位爲1,結果是0,下面看一個簡單例子。 public class data15 { public static void main(String[] args) { int a=2; System.out.println("a 非的結果是:"+(~a)); } }
4.異或運算符 異或運算符是用符號“^”表示的,其運算規律是: 兩個操作數的位中,相同則結果爲0,不同則結果爲1。下面看一個簡單的例子。 public class data16 { public static void main(String[] args) { int a=15; int b=2; System.out.println("a 與 b 異或的結果是:"+(a^b)); } } 運行結果 a 與 b 異或的結果是:13 分析上面的程序段:a 的值是15,轉換成二進制爲1111,而b 的值是2,轉換成二進制爲0010,根據異或的運算規律,可以得出其結果爲1101 即13。