2014-08-31 38 views
2

我想了解的一段代碼,但沒能獲得大約幾點 這裏是Java代碼清晰的思路按位右移和0xFF | Java的

private String firstMethod(int number){ 
    return secondMethod(number >> 16 & 0xFF, 0).concat(secondMethod(number >> 8 & 0xFF, 1)).concat(secondMethod(number & 0xFF, 7)); 
} 

private static String secondMethod(int value, int offset) 
{ 
    return thirdMethod(value >> 4, offset).concat(thirdMethod(value & 0xF, offset + 4)); 
} 

private static String thirdMethod(int value, int offset) 
    { 
    String chars = getAlphabet(); 
    int pos = (value + offset) % 16; 
    return chars.substring(pos, pos + 1); 
} 

傳遞給firstMethod值是第一次的隨機數和所有後續調用到方法路過1.

我清楚逐位右移操作以及對使用& 0xFF增加值,但我仍然不是很清楚以下幾點

  • 按特定數字移動給定值(比如16和8首先比沒有篩選等)
  • 不清楚使用偏移量,特別是通過某個數字作爲偏移量。

誰能幫助我理解那些2點

+0

第三種方法的代碼被切斷 – Antimony 2014-08-31 16:46:37

+0

@Antimony:我向第三種方法添加了代碼 – 2014-08-31 16:49:45

回答

3

通過特定號碼轉移給定值(如16和8的第一比沒有篩等)

您打印字節河西小數。每個字節是8位,使要在每個字節由

不清楚使用的偏移量偏移,具體地使一定數目的作爲偏移量。

我非常肯定偏移是a)不正確的,b)掩蓋/編碼數據的一個真正晦澀的方式。

要打印一個數字爲6字節的hexi-decimal字符串,你可以這樣做。

System.out.println(String.format("%06x", 12345)); 

打印

003039 

這是短得多。 ;)


>>具有令人驚訝的低優先級。這意味着

number >> 16 & 0xFF 

實際上是

number >> (16 & 0xFF) 

number >> 16 

你indedn是

(number >> 16) & 0xFF 

或結果是無符號。

(number >>> 16) & 0xFF 
+0

感謝您澄清事情,但是您能否提供一些關於您的偏移點的更多細節? – 2014-09-01 02:17:05

+0

我關於膠印的觀點是,如果它不在那裏,它會以您希望的河西 - 小數打印。偏移添加了一個簡單的密碼,它可能是有意的,但從閱讀代碼無法知道。 – 2014-09-01 08:29:47

0

一個整數是一個32位數字。

所以作爲二進制數,可以表示爲號:

XXXXXXXXAAAAAAAABBBBBBBBCCCCCCCC (X,A,B,C爲0或1)。

number >> 16給你XXXXXXXXAAAAAAAA。 數>> 16 &爲0xFF給你AAAAAAAA

通過firstMethod數3個字節被splited:

AAAAAAAA和BBBBBBBB和CCCCCCC(16移位,8移和無偏移) 和給予secondMethod。

在第二種方法中,8位被分成高四位和低四位。

在第三種方法中,將四個位轉換爲包含一個字符的字符串。

但感覺依賴於「getAlphabet()」。 也許還會有一個有用的解釋偏移量。

所以你必須提供更多的信息!