在這裏表示使用二進制整數的問題是:在java語言
你給定的2個32位數字,N & M和2位的位置,我&Ĵ。寫來設置於N等於M i和j之間的所有位的方法
例如(例如,M處我 定位和與j開始成爲N的子串): 輸入: INT N =百億, M = 10101,i = 2,j = 6; 輸出: INT N = 10001010100
我的解決辦法:
step 1: compose one mask to clear sets from i to j in N
mask= (((((1<<(31-j))-1) << (j-i+1)) + 1) << i ) - 1
for the example, we have
mask= 11...10000011
step 2:
(N & mask) | (M<<i)
問: 什麼是實現算法的便捷的數據類型?例如 我們在C中有int n = 0x100000,所以我們可以在n上應用按位運算符。 在Java中,我們有BitSet類,它有明確的設置方法,但不支持 左/右移運算符;如果我們使用int,它支持左/右移,但 不具有二進制表示(我不是說二進制字符串表示) 什麼是最好的實現方式?
在Java代碼中(後閱讀所有評論):
int x = Integer.parseInt("10000000000",2);
int x = Integer.parseInt("10101",2);
int i = 2, j = 6;
public static int F(int x, int y, int i, int j){
int mask = (-1<<(j+1)) | (-1>>>(32-i));
return (mask & x) | (y<<i);
}
你是什麼意思_「如果我們使用int ...但沒有二進制表示法?」_您可以絕對地將'&'和'|'應用於Java中的ints。你是說在二進制文件中編寫一個'int'文字嗎? –
如果這是作業,請添加「家庭作業」標籤。 –
是的,我說的是在二進制中定義一個int字面值,它類似於C語言中的這個語句:int N = 0x101010; – SecureFish