按位與& 和 模運算 % 的關係

    unsigned int MAX = 32; // 2的5次方
    unsigned int index = 31;
    index = (index + 100) % MAX;
    printf ("index = %d\n", index); // index = 3
    
    index = 31;
    index = (index + 100) & (MAX - 1);
    
    printf ("index = %d\n", index);  // index = 3

可以看出取模(取餘)和位操作&有異曲同工之妙!不過這裏注意到MAX取值有特殊性,需要是2的次方,不然這個關係就很有可能出問題了。
比如

 unsigned int MAX = 5; // 不是2的次方
 unsigned int index = 4; 
 index = index % MAX; // index = 1
 index = 4; 
index = index & (MAX - 1);// index = 4  
 unsigned int MAX = 4; // 是2的次方
 unsigned int index = 4; 
 index = index % MAX; // index = 0
 index = 4; 
index = index & (MAX - 1);// index = 0  
/*
	 0 1 1
  &  1 0 0
結果爲0 0 0 
*/           
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章