2011-11-01 134 views
15

我想知道哪一個是在java中使用二進制數字的最佳方法。 我需要一種方法來創建一個二進制數字的數組,並與他們做一些計算。例如,我想X或二進制數的值或乘法矩陣。在java中使用二進制數字

問題解決: 非常感謝所有的信息。

我覺得我的情況,我將使用由@Jarrod羅伯遜

+9

請選擇正確的答案(加上綠色的勾號) – kritzikratzi

回答

0

提到的BitSet我從來沒有見過一個使用任何東西,但二進制數的計算機。

Java中的XOR運算符是^。例如,5^3 = 6。對於大多數號碼到字符串轉換的默認基數是10,但也有幾個方法,其允許用戶指定另一基,如2:

System.out.println(Integer.toString(5^3, 2)); 

如果使用Java 7,,您可以在源代碼中使用二進制文字(除了以前支持的十進制,十六進制和八進制格式)。

+0

可能會發生:http://www.theregister.co.uk/2010/04/16/ternary_memory/ – Mat

+0

可能是的,但是這樣的電腦存在,參見http://en.wikipedia.org/wiki/Decimal_computer。當然,Java虛擬機會將這些實現細節抽象出來。 – meriton

+0

哦,當然,他們可能存在,我只是不認爲米格爾正在面對一個。 – erickson

36

在Java版本7,你可以簡單地用0b0B聲明整數和前面的你的數字使用二進制數:

int x=0b101; 
int y=0b110; 
int z=x+y; 

System.out.println(x + "+" + y + "=" + z); 
//5+6=11 

/* 
* If you want to output in binary format, use Integer.toBinaryString() 
*/ 

System.out.println(Integer.toBinaryString(x) + "+" + Integer.toBinaryString(y) 
     + "=" + Integer.toBinaryString(z)); 
//101+110=1011 
+7

您應該提到,這僅適用於Java 7:http://download.oracle.com/javase/7/docs/technotes/guides/language/binary-literals.html –

+1

也適用於Java 8。 –

0

您可以將它們保存爲byte陣列,然後單獨訪問位。然後對它們進行異或運算,只需對字節進行異或運算(這是一個按位操作)。

當然,它不一定是一個字節數組(可能是一個int類型的數組或任何你想要的),因爲一切都以二進制存儲在最後。

12

你可能要找的是BitSet類。

該類實現了根據需要增長的位向量。該位組的每個 組件都有一個布爾值。 BitSet的位是由非負整數索引的 。個別索引位可以是 檢查,設置或清除。一個BitSet可用於通過邏輯AND,邏輯與或, 和邏輯異或操作來修改另一個BitSet的內容 。

默認情況下,該集合中的所有位最初都具有值false。

每個比特集合都有一個當前大小,它是比特集合當前使用的空間的比特數目 。請注意,該大小與位設置的實現相關,所以它可能隨實現而改變。位集合的長度與位集合的邏輯長度有關,並且與實現無關地定義爲 。

除非另有說明,否則將null參數傳遞給BitSet中的任何方法 將導致NullPointerException。

2

這個號碼本身和 之間的區別是它在語言中的表示。例如,「0xD」(基數16),「13」(基數10),「015」(基數8)和「b1101」(基數2)是涉及相同數字的四個不同表示。也就是說,可以使用Java語言中的「int」原語數據類型來表示任何二進制數(以及任何基數中的任意數字),但只有在Java 7中,您才能夠使用binary literal作爲如果我正確理解了你的問題,你以前能夠使用八進制(0)和十六進制(0x)文字來表示這些數字。