雷火电竞-中国电竞赛事及体育赛事平台

歡迎來(lái)到入門(mén)教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

C語(yǔ)言實(shí)現(xiàn)的bitmap位圖代碼分享

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊:

事實(shí)上,我們是用每一個(gè) 元素表示一個(gè)32位的二進(jìn)制字符串,這樣這個(gè)元素可以保留相鄰32個(gè)號(hào)碼是否存在的信息,數(shù)組范圍就下降到10000000/32了.例如對(duì)于號(hào)碼 89256,由于89256 mod 32=2789…8,這樣我們應(yīng)該置a[2789]中32位字符串的第8位(從低位數(shù)起)為1.

#define WORD 32
#define SHIFT 5 ////移動(dòng)5個(gè)位,左移則相當(dāng)于乘以32,右移相當(dāng)于除以32取整
#define MASK 0x1F //16進(jìn)制下的31
#define N 10000000
int bitmap[1 + N / WORD];
/*
 * 置位函數(shù)——用"|"操作符,i&MASK相當(dāng)于mod操作
 * m mod n 運(yùn)算,當(dāng)n = 2的X次冪的時(shí)候,m mod n = m&(n-1)
 */
void set(int i) {
 bitmap[i >> SHIFT] |= (1 << (i & MASK));
}
/* 清除位操作,用&~操作符 */
void clear(int i) {
 bitmap[i >> SHIFT] &= ~(1 << (i & MASK));
}
/* 測(cè)試位操作用&操作符 */
int test(int i) {
 return bitmap[i >> SHIFT] & (1 << (i & MASK));
}

實(shí)現(xiàn)排序(不能重復(fù)):

int main(void) {
 FILE *in = fopen("in.txt", "r");
 FILE *out = fopen("out.txt", "w");
 if (in == NULL || out == NULL) {
 exit(-1);
 }
 int i = 0;
 int m;
 for (i = 0; i < N; i++) {
 clear(i);
 }
 while (!feof(in)) {
 fscanf(in, "%d", &m);
 printf("%d/n", m);
 set(m);
 }
 printf("abnother");
 for (i = 0; i < N; i++) {
 if (test(i)) {
  printf("%d/n", i);
  fprintf(out, "%d/n", i);
 }
 }
 fclose(in);
 fclose(out);
 return EXIT_SUCCESS;
}

上一篇:C語(yǔ)言實(shí)現(xiàn)的統(tǒng)計(jì)素?cái)?shù)并求和代碼分享

欄    目:C語(yǔ)言

下一篇:MFC控件之CListCtrl的應(yīng)用實(shí)例教程

本文標(biāo)題:C語(yǔ)言實(shí)現(xiàn)的bitmap位圖代碼分享

本文地址:http://www.jygsgssxh.com/a1/Cyuyan/3445.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有