位图算法 C语言

#include <stdio.h>  

void set_bit(void *base, unsigned long n)
{
    unsigned long *m = (unsigned long*) base;
    unsigned long size = sizeof(unsigned long) * 8;
    m[ n / size ] |= 1UL << (n % size);
}  

void clear_bit(void *base, unsigned long n)
{
    unsigned long *m = (unsigned long*) base;
    unsigned long size = sizeof(unsigned long) * 8;
    m[ n / size ] &= ~(1UL << (n % size));
}  

int main()
{
    unsigned long value[2] = {0};
    set_bit(value, 0);
    set_bit(value, 63);
    printf("Set:\n");
    printf("0x%016lx, 0x%016lx\n", value[0], value[1]);
    clear_bit(value, 0);
    clear_bit(value, 63);
    printf("Clear:\n");
    printf("0x%016lx, 0x%016lx\n", value[0], value[1]);
    return 0;
}  
时间: 2024-12-22 02:52:25

位图算法 C语言的相关文章

LeetCode-Repeated DNA Sequences (位图算法减少内存)

Repeated DNA Sequences All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACGAATTCCG". When studying DNA, it is sometimes useful to identify repeated sequences within the DNA. Write a function to find all

PID算法(C语言)

/************ PID算法(C语言) ************/ #include <stdio.h> #include<math.h> struct _pid { int pv; /*integer that contains the process value*/ int sp; /*integer that contains the set point*/ float integral; float pgain; float igain; float dgain;

位图算法在用户验证上的应用

前几天在博客园看到一个帖子,讨论两个整数集合比较的算法问题.呵呵,其实任何整数集合的问题都是可以通过位图算法解决.简单地说,就是把值转化为数组下标,将O(n)复杂度降低到O(1)复杂度来获得最高效率.当然,会牺牲一点点空间. 解决单纯的整数集合比较问题,只是纯理论的.实际上,位图算法可以应用在用户登录之后的接口验证上.服务端的设计其实也没什么复杂的地方,就是维护一个数组罢了.只不过这个数组并非是简单的整数集合,而是一个对象List.这个设计的最大优点是在验证方法中,不是通过find方法而是直接访

SHA-1算法c语言实现

安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA).对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要.当接收到消息的时候,这个消息摘要可以用来验证数据的完整性.在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要. SHA1有如下特性:不可以从消息摘要中复原信息:两个不同的消息不

快速排序算法-C语言实现

注:本篇内容为翻译,之所以选择这篇进行翻译原因是该文章含有动画,能够更加直观地展示快速排序.同时,可以仔细看一下代码,代码中把结构化的思想给予了更加充分地表现.按照功能进行模块划分的思想得到了彻底地贯彻. 以下内容翻译自: http://cprogramminglanguage.net/quicksort-algorithm-c-source-code.aspx 译文: 在快速排序算法中,使用了分治策略.首先把序列分成两个子序列,递归地对子序列进行排序,直到整个序列排序结束. 步骤如下: 在序列

数据结构(五)位图算法

位图算法实现思想: 将需要排序的数字转换为数组的下标,通过数组的下标完成对数据的排序,优点效率高,缺点浪费存储空间. 1  public class BitMapTest { 2      /** 3       * 参数说明: 4       * @param buf 新定义的bit数组(int类型) 5       * @param value 需排序的传入数值 6       * @return 7       *  8       * 功能说明: 9       *     将value

位图算法及其应用

位图算法 位图法就是bitmap的缩写,所谓bitmap,是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况.通常是用来判断某个数据存不存在的. 应用  1.给40亿个不重复的无符号整数,没排过序.给一个无符号整数,如何快速判断一个数是否在这40亿个数中. 解决方法:申请512M的内存一个bit位代表一个unsigned int值读入40亿个数,设置相应的bit位读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在.  2.使用位图法判断整形数组是否存在重复

RSA算法C语言实现

RSA算法C语言实现 一.源文件三个rsa.h , rsa.c , main.c //rsa.h #include <stdio.h> #define MAX_NUM 63001 #define MAX_PRIME 251 //! 返回代码 #define OK 100 #define ERROR_NOEACHPRIME 101 #define ERROR_NOPUBLICKEY 102 #define ERROR_GENERROR 103 unsigned int MakePrivatedK

数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值

一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚,所以很多需要自己揣摩.这也体现了算法和程序设计语言的特点,算法更侧重本质的描述,而任何编程语言都要照顾到实现的细节以及数据类型等语法方面的需求. 表达式求值: [编码中....] 二.头文件 迷宫求解: 1 //3_2_maze.h 2 /** 3 author:zhaoyu 4 email:[em