C语言实现的bitmap位图代码分享

事实上,我们是用每一个 元素表示一个32位的二进制字符串,这样这个元素可以保留相邻32个号码是否存在的信息,数组范围就下降到10000000/32了.例如对于号码 89256,由于89256 mod 32=2789…8,这样我们应该置a[2789]中32位字符串的第8位(从低位数起)为1.

#define WORD 32
#define SHIFT 5 ////移动5个位,左移则相当于乘以32,右移相当于除以32取整
#define MASK 0x1F //16进制下的31
#define N 10000000
int bitmap[1 + N / WORD];
/*
 * 置位函数——用"|"操作符,i&MASK相当于mod操作
 * m mod n 运算,当n = 2的X次幂的时候,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));
}
/* 测试位操作用&操作符 */
int test(int i) {
 return bitmap[i >> SHIFT] & (1 << (i & MASK));
}

实现排序(不能重复):

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;
}
(0)

相关推荐

  • C++中Cbitmap,HBitmap,Bitmap区别及联系

    加载一位图,可以使用LoadImage: HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int CyDesired,UINT fuLoad): LoadImage可以用来加载位图,图标和光标 加载时可以规定加载图的映射到内存的大小: cxDesired:指定图标或光标的宽度,以像素为单位.如果此参数为零并且参数fuLoad值中LR_DEFAULTSIZE没有被使用,那么函数使用目前的资源宽度.

  • C语言中打印特殊图案的实现代码

    代码如下所示: 复制代码 代码如下: #include <stdio.h> int main(){ // 主要是找到行和列的关系   int i,j,k;      for(i=0;i<4;i++)  //做为行循环   {    for(j=0;j<=2-i;j++)  // 打印一行中的空白     printf(" ");    for(k=0;k<=2*i;k++)  //打印一行中*号     printf("*");   

  • C语言位图算法详解

    本文详细讲述了位图算法的定义与C语言实现方法,分享给大家供大家参考之用.具体如下: 位图法定义: 位图法就是bitmap的缩写,所谓bitmap,是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况.通常是用来判断某个数据存不存在的. 例如,要判断一千万个人的状态,每个人只有两种状态:男人,女人,可以用0,1表示.那么就可以开一个int数组,一个int有32个位,就可以表示32个人.操作的时候可以使用位操作.   数据结构: unsigned int bit[N]; 在这个数组

  • C++将CBitmap类中的图像保存到文件的方法

    本文实例讲述了C++将CBitmap类中的图像保存到文件的方法.分享给大家供大家参考.具体实现方法如下: 使用下面的代码,可以把CBitmap类中的图像保存到图像文件中.支持格式:BMP.JPG.GIF和PNG. void SaveBitmap(CString strFilePath, CBitmap Bitmap) { if ( Bitmap.m_hObject ) { CImage imgTemp; // CImage是MFC中的类. imgTemp.Attach(Bitmap.operat

  • C++基于Directx MMX实现的图像灰度转换代码

    本文实例讲述了基于Directx MMX 编写的实现图像灰度处理的方法,要编译此程序需DirectX SDK5.0,代码中所需要的ddutil.h与ddutil.cpp文件,请自行下载加入工程.在WindowNT4.0+SP3环境中编译通过,代码已经过整理,包含有注释.如下所示: #include <windows.h> #include <windowsx.h> #include <stdio.h> #include <ddraw.h> #include

  • c语言常见图片格式判断实例

    我想尽各种思路.今天,终于把图片判断搞定了. 在此,我写一下我的思路.希望对那些不想看代码的朋友们有帮助. 常风的的图片格式有:bmp,png,jpg,gif等图片格式. 我用的方法是读取图片头文件中的标识符: 复制代码 代码如下: unsigned short  BMP=0x4D42,JPG=0xD8FF,PNG[4]={0x5089,0x474E,0x0A0D,0x0A1A},GIF[3]={0x4947,0x3846,0x6139}; 你会发现,会一次读取n个字节的顺序不同:与用"okhi

  • C语言读取BMP图像数据的源码

    复制代码 代码如下: /* File name:   bmpTest.c   Author:      WanChuan XianSheng    Date:        Oct 01, 2011   Description: Show all Info a bmp file has. including    FileHeader Info, InfoHeader Info and Data Part. Reference: BMP图像数据的C语言读取源码*/ #include <stdio

  • C语言实现的bitmap位图代码分享

    事实上,我们是用每一个 元素表示一个32位的二进制字符串,这样这个元素可以保留相邻32个号码是否存在的信息,数组范围就下降到10000000/32了.例如对于号码 89256,由于89256 mod 32=2789-8,这样我们应该置a[2789]中32位字符串的第8位(从低位数起)为1. #define WORD 32 #define SHIFT 5 ////移动5个位,左移则相当于乘以32,右移相当于除以32取整 #define MASK 0x1F //16进制下的31 #define N

  • Java语言实现Blowfish加密算法完整代码分享

    前几天网上突然出现流言:某东发生数据泄露12G,最终某东在一篇声明中没有否认,还算是勉强承认了吧,这件事对于一般人有什么影响.应该怎么做已经有一堆人说了,所以就不凑热闹了,咱来点对程序猿来说实际点的,说一个个人认为目前比较安全的加密算法:Blowfish. 上代码之前,先说几点Blowfish加密算法的特点: 1. 对称加密,即加密的密钥和解密的密钥是相同的: 2. 每次加密之后的结果是不同的(这也是老夫比较欣赏的一点): 3. 可逆的,和老夫之前的文章介绍的md5等摘要算法不一样,他是可逆的:

  • GO语言实现文件上传代码分享

    功能很简单,代码也很简洁,这里就不多废话了. 复制代码 代码如下: package main import (     "fmt"     "io"     "net/http"     "os" ) const (     upload_path string = "./upload/" ) func helloHandle(w http.ResponseWriter, r *http.Request)

  • C语言完美实现动态数组代码分享

    我们知道,C语言中的数组大小是固定的,定义的时候必须要给一个常量值,不能是变量. 这带来了很大的不便,如果数组过小,不能容下所有数组,如果过大,浪费资源. 请实现一个简单的动态数组,能够随时改变大小,不会溢出,也不会浪费内存空间. 下面的代码实现了简单的动态数组: #include <stdio.h> #include <stdlib.h> int main() { //从控制台获取初始数组大小 int N; int *a; int i; printf("Input ar

  • C语言实现的猜拳游戏代码分享

    这是一个简单的猜拳游戏(剪子包子锤),让你与电脑对决.你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负. 下面的代码会实现一个猜拳游戏,让你与电脑对决.你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负. 启动程序后,让用户出拳,截图: 用户出拳,显示对决结果:截图: 代码实现: #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { char gamer; // 玩家出拳 int

  • C语言对对碰游戏源码分享

    本文实例为大家分享了C语言对对碰游戏的具体代码,供大家参考,具体内容如下 //////////////////////////////////////// //画素材的x和y都是反的,因为x表示行,但是画出来x表示列,y同 //////////////////////////////////////// #include <graphics.h> #include <fstream> #include <strstream> #include <iomanip&g

  • C语言实现的学生选课系统代码分享

    好久没玩过C语言了,上一次还是在大二的时候...废话不多说,这里有一个C语言实现的学生选课系统代码,分享给大家,具体如下: #include<stdio.h> #include<stdlib.h> int N1,N2,kk1,kk2,kk3; struct couse * head1; struct student * head2; struct couse//课程信息结构体 { int num1; char name1[20]; int score; int nelepeo; /

  • Java语言实现二叉堆的打印代码分享

    二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树).二叉堆有两种:最大堆和最小堆.最大堆:父结点的键值总是大于或等于任何一个子节点的键值:最小堆:父结点的键值总是小于或等于任何一个子节点的键值. 打印二叉堆:利用层级关系 我这里是先将堆排序,然后在sort里执行了打印堆的方法printAsTree() public class MaxHeap<T extends Comparable<? super T>> { private T[] data; pr

  • Java语言实现基数排序代码分享

    算法思想:依次按个位.十位...来排序,每一个pos都有分配过程和收集过程,array[i][0]记录第i行数据的个数. package sorting; /** * 基数排序 * 平均O(d(n+r)),最好O(d(n+r)),最坏O(d(n+r));空间复杂度O(n+r);稳定;较复杂 * d为位数,r为分配后链表的个数 * @author zeng * */ public class RadixSort { //pos=1表示个位,pos=2表示十位 public static int g

  • C语言实现简易通讯录(静态版本)的代码分享

    目录 一.通讯录 1.演示效果 2.完整代码 二.代码解析 1.宏定义及结构体声明 2.主菜单函数 3.主函数 4.查找函数 5.初始化联系人信息 6.添加联系人信息 7.显示所有联系人信息 8.删除指定联系人信息 9.修改联系人信息 10.查找指定联系人 11.按照姓氏对联系人信息排序 12.清空所有联系人信息 一.通讯录 1.演示效果 2.完整代码 #define _CRT_SECURE_NO_WARNINGS 1 //#include "ConTacts.h" #include

随机推荐