91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

復習二進制位的一些操作

發布時間:2020-07-15 08:42:02 來源:網絡 閱讀:344 作者:稻草陽光L 欄目:開發技術

  最近在學習數據結構感覺利用二進制位來標記一個數是否存在是特別節省空間的,比如位圖和布隆過濾器是效率比較高的。所以感覺有必要復習一下二進制位的一些常用的操作。

  通過幾個例子來復習一下:

(一)寫一個函數返回參數二進制中 1 的個數(與運算

int count_one_bits(size_t value)
{
	size_t i = 1;
	int count = 0;
	while(1)
	{
		if((value&i)==i)//1&1==1,1&0=0;
			printf("1",count++);
		else 
			printf("0");
		i <<= 1;
		if(i>value)
			break;
	}
	printf("\n");
	return count;
}
int count_one_bits(size_t value)
{
	int count = 0;
	while (value)
	{
		count++;
		value = value&(value - 1);
	}
	printf("\n");
	return count;
}

  1&1=1;1&0=0;    num<<1等價于num*2;num>>1等價于num/2;

  這一題主要運用或(&)的性質和<<,可以計算出一個數二進制位中1的個數。

  

(二)交換兩個一樣大的數組的內容(異或運算

int i,A[10]={1,2,3,4,5,6,7,8,9,10};
int B[10]={11,12,13,14,15,16,17,18,19,20};
for(i=0;i<sizeof(A)/sizeof(A[0]);i++)
{	
    A[i]=A[i]^B[i];
    B[i]=A[i]^B[i];
    A[i]=A[i]^B[i];
}

  異或的是有那么一個公式的,a=a^b;b=a^b;a=a^b;即可交換a和b的值。

(三)求兩個數的最大公約數(取模)

#include<stdio.h>

int main()
{
int m,n,p;
printf("Input two numbers:");
scanf("%d%d",&m,&n);
while(m%n != 0)
{
  p = m%n;
  m = n;
  n = p;
}
printf("最大公約數是%d\n",n);
}

(四)判斷一個數是否是素數(常用素數,要理解素數怎么來的)

int is_prime(int n)
{
	int i;
	for(i=2;i<(double)sqrt((double)n);i++)
		if(n%i==0)
			return 0;
	return 1;
}

  判斷一個數是否是素數,只要這個數除以 2到這個數的開方任意一個數 都不能整除就是一個素數,否則不是素數。


 當然今天這篇博客很基礎,但是是非常有用的,熟練掌握以后很有用。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南陵县| 普陀区| 克山县| 金寨县| 定陶县| 板桥市| 班戈县| 宁波市| 莆田市| 彝良县| 深泽县| 确山县| 仁怀市| 夏河县| 搜索| 磐安县| 昌邑市| 靖安县| 衡阳市| 平山县| 舒兰市| 德惠市| 阿拉善右旗| 宜阳县| 扎兰屯市| 永吉县| 高台县| 米脂县| 清镇市| 昭觉县| 龙泉市| 绥江县| 溆浦县| 昌黎县| 沅江市| 寻甸| 万宁市| 四子王旗| 正安县| 卓资县| 恩施市|