2015-01-09 14 views
2

我正試圖找到一個簡單的方法來設置整數或短值內的幾個位。是否有任何簡單的方法來設置短或int內的行中的幾個位?

對於一個簡短的值,我想設置5位,從位號6開始。 我想要設置的值是我可以存儲在一個字節或短或任何其他值。

對於Java SetBits,我沒有看到任何可以做這種事情的地方。 似乎應該有一個容易做到這一點。

有沒有人知道一個簡單的方法來做到這一點,除了一次設置一個位或類似的東西?

+0

你要找的位運算符:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html – fejese 2015-01-09 23:26:26

+0

感謝您的答覆。這將爲我需要做的工作,但我希望有建立Java方法或方法開發,你有一個像這樣的setBits(bitOffset,numbits,ValueToSet,OriginalValue)方法 – user3470688 2015-01-09 23:35:02

+0

你想要的是'|'。 – 2015-01-10 00:03:33

回答

0

簡單的方法是使用按位運算。例如,假設位從從零開始正確編號的,這臺5個比特到那些從偏移量開始6.

int target = ... 
target = target | 0x07b0; // that is 00000 0111 1100 0000 

,或者如果你正在使用Java 8:

target = target | 0b00000 0111 1100 0000; 

如果要設置相同的位值,可以從一個變量獲得,然後......涉及低層次位擺弄

int target = ... 
int value = ... 
int temp = target & (~ 0b00000 0111 1100 0000); // clear current bit values 
target = temp & (value << 6); // set the new values. 

代碼是混亂和不透明,但biwise運營商的邏輯(和移位歌劇))很簡單。如果您是在生產代碼中執行此操作,那麼我強烈建議您定義一組具有語義相關名稱的常量,並使用它們而不是整數。


我希望有一個內置的Java方法...

沒有一個,據我所知。但是如果您認爲這會使編碼更簡單,那麼您可以輕鬆編寫和測試自己的位操作方法。 (問題是,這樣的API可能不會提高代碼的可讀性......而產生的代碼很可能是更難的JIT編譯器優化。)

+0

請解釋downvote。 – 2015-01-10 00:36:36

+0

是不是我,但我經常試圖downvote代碼回覆「寫我的代碼」的問題。 – 2015-01-10 20:05:28

0

您可以在Java中使用二進制文字:

// An 8-bit 'byte' value: 
byte aByte = (byte)0b00100001; 

// A 16-bit 'short' value: 
short aShort = (short)0b1010000101000101; 

// Some 32-bit 'int' values: 
int anInt1 = 0b10100001010001011010000101000101; 
int anInt2 = 0b101; 
int anInt3 = 0B101; // The B can be upper or lower case. 

// A 64-bit 'long' value. Note the "L" suffix: 
long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L; 

更多here

相關問題