利用int數 的移位操作 儲存資料

來源:互聯網
上載者:User

   以前雖學習過數位移位操作,但從未用到,這段時間整天和幾個c程式在一起,學習到不少好的東西。下面就是我看到他們用移位操作來儲存 一些資料,還是不錯的~~

問題是這樣的: 已知一個玩家 和他包裹裡擁有的一系列物品id(1,2,3 ...),按照以前的思維,當然是有一個玩家物品表,儲存玩家id 和物品id,但是c程式們是這樣存的:

假如 要儲存 物品id 1,2,3 ,將這3個id 認為是 1110,就是用0和1表示 這個位置上是否有值(從右至左),1110  就是指:分別在 1號,2號 3號位置上有值。這樣就可以用一個資料儲存這3個id值,1110 就是十進位數14(2+4+8)。 在從資料庫中讀出後,再用移位操作將14 解析成1110,而且用 1110 這個數 產生玩家的包裹 也十分方便。以下是範例程式碼,例如 要儲存 2,3,4,7 這4個資料:

public class MainTest { public static void main(String[] args) {  int count =10;//假定最大id 為10  int [] arr = {4,2,3,7};  int a = getInt(arr);//通過移位操作 將4個數儲存成一個數  System.out.println("a = "+a);    //以下是解析方法  //------------方法一 通過移位解析----------------  int [] arr2 = new int [10];  for (int i = 0; i < count; i++) {   arr2[i] = (a&(1<<i)) >> i; //這個說實話,我沒看懂,但結果是正確的,c程式員說:你寫多了就懂了 。。。。  }    System.out.print("str1 = ");  for (int i = 0; i < arr2.length; i++) {   System.out.print(arr2[i] + "," );  }  System.out.println();  //---------方法二,java 內建的方法,通過方法名就能看懂了-------------------  String str = Integer.toBinaryString(a);  System.out.println("str2 = "+str); }  public static int getInt(int... arr){  int a = 0;  for (int i = 0; i < arr.length; i++) {   a|=(1<<arr[i]);// 1<< 一個值是將1左移,右邊補0, 再將a|=這個數,就能將 a的 位元 相應的這一位上 置為1,這種方法可以起到 update 的作用,如果已經是1,則不 變化,如果是0 則 update 為 1,可以略加判斷,就能知道哪些id資料是新增的,哪些id是已有的  }  return a; }}

 

 

運行下程式,結果:

a = 14str1 = 0,1,1,1,0,0,0,0,0,0,str2 = 1110

 

當然要注意 int 的取值範圍,如果物品id數 超過32位 就不能這樣存了,當然可以再加一個物品類型 判斷,一般情況下,遊戲中同一類型的東西也不會超過這個數。。

以後要多多學習下 c 的代碼~~

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.