2013-02-27 84 views
0

我玩遊戲,在數據庫中我們設置100663296爲通用領先,但數據庫中的此字段也會寫入不同的內容,因此它將該號碼更改爲100794368 我被告知可能會使用bit-wise check來檢查第一個數字是否與第二個數字相同,並且我使用bit-wise checks進行了搜索,但是對我的支票使用什麼感到困惑。在Javascript中按位檢查

以下是其他一些數字的變化,包括上面的數字。

predefined number new changed number/ever changing number. 
100663296  =  100794368 
67108864  =  67239936 
117440512  =  2231767040 

所以我該如何去檢查這些數字?

在我注意到數字發生變化之前,這裏是我使用的代碼的一部分。

if (playerData[i].nameflags == 67108864) 
{ 
    playerRows += '<img src ="icons/GM-Icon.png" alt="GM" title="GM"></img>'; 
} 

thx以Bergi爲答案。

if (playerData[i].nameflags & 0x400000 /* === 0x400000 */) 

這個接縫工作很好。

也THX到vr1911428 和每一個其他人的幫助這一點。

+0

如果你沒有所有可能的位掩碼值和它們的含義,那麼將會有點難以做到這一點我相信。 – 2013-02-27 23:55:24

+1

我不明白。 12345的條件= 12666是因爲12 = 12? – apoq 2013-02-28 00:05:53

+0

Fabrico是對的。爲了避免你需要知道你在掩模中尋找哪個位。 – Aurand 2013-02-28 00:08:55

回答

0

因此,讓我們這些數字轉換爲二進制表示法(無符號整數):

> 100663296 
00000110000000000000000000000000 
> 100794368 
00000110000000100000000000000000 
> 67108864 
00000100000000000000000000000000 
> 67239936 
00000100000000100000000000000000 
> 117440512 
00000111000000000000000000000000 
> 2231767040 
10000101000001100001000000000000 

注意的是,最後一個數字超出JavaScripts bitwise arithmetic範圍,只有32位工作的簽署整數 - 你將無法使用最左邊的位。

那麼你現在想比較哪些位?有很多的可能性,上面的方案沒有說清楚,但它看起來像你正在尋找從右邊的第27位(2 = 67108864)。爲了匹配反對的話,你可以申請一個二進制位掩碼:

x & Math.pow(2, 26) 

應該評估爲2 26再次或零 - 所以你可以檢查感實性。順便說一句,而不是使用pow你可以使用十六進制表示法:0x4000000。就這樣,你的條件將是這樣的:

if (playerData[i].nameflags & 0x400000 /* === 0x400000 */) 
+0

thx爲這個問題的答案。 我還查看了自己的服務器的C++代碼,並找到了本節。 FLAG_GM = 0x04000000, FLAG_GM_SUPPORT = 0x04000000, FLAG_GM_SENIOR = 0x05000000, FLAG_GM_LEAD = 0x06000000, FLAG_GM_PRODUCER = 0x07000000, – whitevamp 2013-03-01 00:49:40

0

如果您需要檢查兩個整數的按位完全平等的,所有你需要的僅僅是「==」操作,但使用它,你應該保證兩個操作數都是整數:

left = 12323; 
right = 12323; 
if (left == right) 
    alert("Operands are binary equal; I'll guarantee that. :-)"); 

雖然要小心,如果操作數的至少一個字符串表示數字,不是一個數字,兩個操作數將被視爲字符串,你可能會比較混亂的結果:

left = ""; 
right = 12323; 
if (left != right) 
    alert("Operands are not equal, even though they represent 'equal values', as they  are compared as strings."); 

一般來說,這些天,表示數據字符串操作嘗試而不是數據本身是初學者的真正詛咒;很難向他們解釋。在JavaScript中解釋特別困難,其鬆散型打字概念本身非常複雜且難以理解,它背後的虛幻簡單。

最後,如果你需要比較不同的比特(並且,從你的問題,我沒有看到這方面的需要),就可以使用二進制運算符:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators
就是這樣,基本上是這樣。 ...................