十進制負數轉換成二進制數的方法及位運算

計算機中一般用補碼來表示,若對於補碼有不清楚之處請參考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位二進制可以表示範圍內的負數均可如此進行計算。
這裏需要注意的是:
①二進制的位數及其可以表示的十進制數的範圍。
②二進制數碼變反加一的過程。

Java的位運算符詳解實例——與(&)、非(~)、或(|)、異或(^)  

位運算符主要針對二進制,它包括了:“與”、“非”、“或”、“異或”。從表面上看似乎有點像邏輯運算符,但邏輯運算符是針對兩個關係運算符來進行邏輯運算,而位運算符主要針對兩個二進制數的位進行邏輯運算。下面詳細介紹每個位運算符。

 

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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章